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

TypeScript如何基于对象数组动态推导生成对象的类型

首先你需要先固定原始数组的字面量类型,否则TypeScript会把数组元素的name字段推导为通用的string类型,无法生成指定固定键的类型结构。

完整实现步骤

  1. 给原始数组添加as const断言,固定内部字段为字面量类型
const arr = [
 {
   name: 'john',
   age: '20'
 },
 {
   name: 'anna',
   age: '30'
 }
] as const;
  1. 从数组类型中提取构造目标对象类型
// 提取所有name的字面量联合类型:"john" | "anna"
type ArrNameUnion = typeof arr[number]['name'];
// 生成和需求一致的对象类型
interface IObj {
  [key in ArrNameUnion]: number
}
  1. 按照类型要求生成obj对象
    这里提供两种写法:
  • 推荐用Object.fromEntries写法,类型适配更自然:
// 注意原age是字符串类型,要转成数字匹配number类型要求
const obj: IObj = Object.fromEntries(
  arr.map(item => [item.name, Number(item.age)])
);
  • 如果你坚持用原来的forEach写法,需要提前给空对象做类型断言:
const obj: IObj = {} as IObj;
arr.forEach(o => obj[o.name] = Number(o.age));

完成以上步骤后,obj就会拥有你需要的类型结构:访问obj.john、obj.anna会有正确的number类型提示,写错键名时TypeScript会直接抛出类型错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:45:04