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

如何从字符串数组生成TypeScript对象的实际类型?

从字符串数组生成对应对象类型的解决方案

要解决TypeScript无法推断数组转对象后具体类型的问题,按以下步骤操作即可:

1. 让数组保留具体的字面量类型信息

默认情况下,const myFields = ['field1', 'field2']会被推断为泛泛的string[],TypeScript会丢失每个元素的具体键名。我们可以用as const断言将其转为只读字面量元组,让TypeScript记住每个元素的精确值:

const myFields = ['field1', 'field2'] as const;

2. 基于数组元素生成目标对象类型

通过typeof myFields[number]提取数组所有元素的联合类型,再用映射类型为每个键指定string类型:

type MyObject = {
  [K in typeof myFields[number]]: string;
};

TypeScript会自动将这个类型解析为你需要的结构:

type MyObject = {
  field1: string;
  field2: string;
};

3. 修正对象生成代码的类型推断

最后给reduce的初始值加上类型断言,确保生成的myObject被正确推断为MyObject类型,而非空对象:

const myObject = myFields.reduce((obj, fld) => ({ ...obj, [fld]: `val of ${fld}` }), {} as MyObject);

现在访问myObject.field1就不会出现类型错误,TypeScript能准确识别它是string类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:07:12