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

如何更简洁动态定义联合类型?能否从数组推导该类型?

从对象数组推导严格联合类型的TypeScript实现

当然可以从给定的数组推导对应的严格联合类型,无需手动罗列所有可选值。核心是利用TypeScript的const断言保留字面量类型,再通过类型工具提取目标属性的类型。

具体实现代码

  1. 用as const断言定义原始数组,让编译器保留元素的字面量类型:
const mySourceArray = [{ myProperty: 'foo' }, { myProperty: 'bar' }] as const;
  1. 推导myProperty的联合类型:
type MyPropertyType = typeof mySourceArray[number]['myProperty'];
// 此时 MyPropertyType 等价于 'foo' | 'bar'
  1. 定义接口并使用推导的类型:
interface MyInterface {
  myProperty: MyPropertyType;
}
  1. 验证类型约束:
// 符合类型要求,编译通过
const validItems: MyInterface[] = [{ myProperty: 'foo' }, { myProperty: 'bar' }];

// 类型不匹配,编译报错
const invalidItem: MyInterface = { myProperty: 'baz' }; // 错误:'"baz"' 无法赋值给 '"foo" | "bar"'

关键说明

  • as const是实现的核心:它会将数组转为只读的字面量数组,防止编译器把元素类型拓宽为通用的string。
  • 后续如果需要新增可选值,只需要修改原始的mySourceArray,对应的联合类型会自动更新,完全满足动态简洁的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:12:10