You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript如何基于已有接口键生成键值对数组的类型接口

你已经定义了通用的KeyValue结构,我们可以基于它写一个泛型工具类型,直接把任意对象类型转换为对应键值对数组:

// 基于你已有的KeyValue类型扩展
type KeyValueArray<T> = Array<{
  [K in keyof T]: KeyValue<K, T[K]>
}[keyof T]>

接下来替换CarRequest里的features类型即可,不需要手动枚举键:

interface CarRequest {
  manufacturer: string;
  model: string;
  // 直接传入Features类型,自动生成对应的键值对数组类型
  features?: KeyValueArray<Features>
}

处理函数部分,因为TS原生的Object.entries会把键的类型放宽为string,我们加个类型断言确认类型即可,逻辑上完全安全:

function prepareCarRequest(car: Car): CarRequest {
  return {
    manufacturer: car.manufacturer,
    model: car.model,
    features: Object.entries(car.features).map(([key, value]) => ({ key, value })) as KeyValueArray<Features>
  };
}

实现后这个类型会自动同步Features接口的所有修改:如果你之后给Features新增/删除字段,或者修改某个字段的类型,CarRequest['features']的类型会自动更新,不需要手动调整。同时会做严格的类型校验:手动构造features元素时,key只能是wheels/color/packages三个合法值,value的类型也会和对应键的定义完全匹配。

内容的提问来源于stack exchange,提问作者ilya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 12:45:03