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

如何从对象数组生成TypeScript联合类型?

从对象数组生成TypeScript联合类型并实现智能提示

问题原因

你用array.map结合const断言失败,是因为map返回的是运行时动态创建的新数组,不属于const断言允许的字面量、枚举成员等引用范畴,所以无法直接对其使用断言。我们需要从原始数组的类型层面提取精确的字面量联合类型。

解决方案

1. 给原始数组添加const断言,锁定字面量类型

先让TypeScript精确推断数组中每个name的具体字面量值,而非宽泛的string类型:

const names = [
  { name: 'Bob' },
  { name: 'Jane' },
  { name: 'John' },
  { name: 'Mike' },
] as const;

2. 提取目标联合类型

通过typeof获取数组的类型,再用索引访问语法提取所有name字段的字面量值,组成联合类型:

type NameType = typeof names[number]['name'];
// 最终得到类型:'Bob' | 'Jane' | 'John' | 'Mike'

3. 实现带智能提示的getName函数

将NameType作为函数的参数或返回值类型,IntelliSense就会自动提示数组中的可用名称:

function getName(name: NameType): NameType {
  return name;
}

// 调用时会自动弹出提示:Bob、Jane、John、Mike
getName('Bob');

可选:生成运行时名称数组

如果需要在运行时获取所有名称的数组,同时保留精确类型,可以基于断言后的原始数组生成:

const nameList = names.map(item => item.name) as readonly NameType[];
// nameList的类型为 readonly ['Bob', 'Jane', 'John', 'Mike']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:30:58