如何将数组转换为对象,使返回的常量具有指定类型?
实现数组转带指定类型的对象
要实现这个需求,你需要用TypeScript的泛型捕获输入数组的键类型,再配合Record工具类型定义返回对象的结构(纯JavaScript做不到这种类型约束),具体实现如下:
function convertArrayToObject<K extends string>(keys: K[]): Record<K, string> { return keys.reduce((prev, key) => ({ ...prev, [key]: key }), {} as Record<K, string>); } // 使用示例 const result = convertArrayToObject(['aa', 'bb']); // result的类型自动推导为 { aa: string, bb: string }
关键细节说明:
K extends string:泛型K被约束为字符串类型,会自动捕获传入数组的字面量类型(比如示例里的'aa'、'bb')Record<K, string>:TypeScript内置工具类型,用来生成一个以K为键、值统一为string的对象类型{} as Record<K, string>:因为reduce的初始值是空对象,需要用类型断言告诉TS最终返回的结构符合我们定义的类型
如果你的数组元素是动态生成的(不是固定字面量),TS没办法捕获具体的键类型,此时返回类型会是{ [key: string]: string }——这是合理的,因为编译期无法预知动态键的具体值。
内容的提问来源于stack exchange,提问作者flyflydogdog
相关产品推荐
相关产品推荐

