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

如何将数组转换为对象,使返回的常量具有指定类型?

实现数组转带指定类型的对象

要实现这个需求,你需要用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 04:39:57