已知数组字面量list,如何在TypeScript中推导对应key的obj类型
实现步骤
- 首先收窄数组的推导类型
默认直接声明const list = ['aa', 'bb', 'cc']时,TypeScript 会将其推导为string[]类型,无法提取到具体的键名字面量。需要添加as const断言,让 TypeScript 把数组推导为只读的字面量集合。 - 基于数组元素生成目标对象类型
用(typeof list)[number]拿到数组所有元素的联合类型,再结合Record工具类型生成目标对象类型。
完整代码示例
// 用as const收窄类型为只读字面量数组 const list = ['aa', 'bb', 'cc'] as const; // 推导得到目标类型 type Obj = Record<(typeof list)[number], any>;
生成的Obj类型等价于你需要的结构:
type Obj = { aa: any; bb: any; cc: any; }
可选写法
如果你不想用内置的Record工具类型,也可以用映射类型手写,效果完全一致:
type Obj = { [Key in (typeof list)[number]]: any };
如果后续需要修改值的类型,把代码里的any替换为你需要的类型(比如string、number等)即可。
内容的提问来源于stack exchange,提问作者user8154168
相关产品推荐
相关产品推荐

