TypeScript如何定义以数组元素为键、值为any的对象类型?
解决方案
要实现这个需求,你可以利用TypeScript的const断言和Record工具类型来完成,具体步骤如下:
- 给数组添加
as const断言,让TypeScript将数组元素识别为字面量类型的元组,而非宽泛的number[]类型,这样才能准确提取每个元素作为键类型。 - 通过
typeof arr[number]提取数组元素的联合类型,作为对象的键类型。 - 用
Record工具类型定义对象类型,指定键为上述联合类型,值为any。
完整代码示例:
// 用as const断言数组,锁定元素的字面量类型 const arr = [100, 4, 200, 1, 2] as const; // 提取数组元素的联合类型作为键类型 type ArrKeys = typeof arr[number]; // 定义目标对象类型,键为数组元素,值为any type TargetObj = Record<ArrKeys, any>; // 现在obj会被严格检查,键必须是数组中的元素,值可以是任意类型 const obj: TargetObj = { 100: '任意值', 4: 123, 200: true, 1: null, 2: {} };
额外说明
- 如果不需要保留原数组的可变性,直接用
as const断言是最优选择;如果数组需要后续修改,但仍想基于初始元素定义键类型,可以单独定义一个字面量元组类型来复用。 - 如果你希望值的类型不是
any,可以把Record<ArrKeys, any>中的any替换成你需要的具体类型(比如string、number等)。
内容的提问来源于stack exchange,提问作者fancy_yu
相关产品推荐
相关产品推荐

