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

如何使用TypeScript提取数组对象key值的类型?

实现从数组对象的key字段生成精确元组类型

要让test函数返回["a", "b"]这种精确的元组类型,需要解决两个核心问题:让TypeScript保留数组元素的字面量类型,以及正确提取key字段组成对应元组。

修正后的代码实现

// 使用as const让TypeScript推断出具体的字面量元组类型,而非宽泛的数组
const arr = [{ key: "a", nnumber: 11 }, { key: "b", nnumber: 1 }] as const;

// 泛型函数:提取传入数组中每个元素的key字段,生成对应元组类型
function test<T extends readonly { key: string }[]>(keys: T): { [K in keyof T]: T[K]['key'] } {
    // map默认返回数组,用类型断言转换为目标元组类型
    return keys.map((item) => item.key) as { [K in keyof T]: T[K]['key'] };
}

// tmp的类型会被精确推断为["a", "b"]
const tmp = test(arr);
//   ^? const tmp: ["a", "b"]

关键细节说明

  • as const的作用:将普通数组转换为只读字面量元组,让TypeScript记住每个元素的key是具体的"a"和"b",而非笼统的string类型。
  • 映射类型的使用:{ [K in keyof T]: T[K]['key'] }通过遍历传入数组类型T的每个索引,提取对应元素的key类型,最终生成与原数组长度一致的精确元组。
  • 类型断言的必要性:Array.prototype.map默认返回的是普通数组类型(如string[]),这里用类型断言告诉TypeScript返回结果是我们定义的精确元组类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:56:04