You need to enable JavaScript to run this app. TypeScript中能否基于数组对象属性值定义字面量联合类型
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中能否基于数组对象属性值定义字面量联合类型

完全可以实现,你只需要先给原数组添加as const断言锁定字面量类型,再从数组类型中提取name属性的联合类型即可。

首先调整原数组的定义,添加as const:

const a = [
  {
     name: 'n1',
     text: 't1',
  },
  {
     name: 'n2',
     text: 't2',
  },
  {
     name: 'n3',
     text: 't3',
  },
] as const;

之后按如下方式定义目标类型:

type T = typeof a[number]['name'];

此时T的类型就会被推导为'n1' | 'n2' | 'n3',完全符合你的需求。如果后续你给数组a新增带name属性的元素,T类型也会自动同步新增对应的字面量类型,不需要手动修改。

原理解释

  • as const 会让 TypeScript 把数组的所有属性推导为不可修改的字面量类型,避免name属性被默认放宽为string类型
  • typeof a[number] 可以拿到数组所有元素的类型联合
  • 最后通过索引访问['name']即可提取所有元素的name属性值的联合类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 22:24:08