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

如何基于普通对象的值生成TypeScript联合类型?

如何从对象属性值创建联合类型?

嘿,这个需求在TypeScript里完全可以实现,而且步骤很清晰,咱们来拆解一下:

首先,你需要确保TypeScript能精准识别对象里的每个属性值为字面量类型,而不是宽泛的string类型。默认情况下,TypeScript会把你的myObject推断成{ [key: number]: string },这样就没法提取具体的字符串值了。所以第一步要给对象加上as const断言,锁定它的类型:

const myObject = { 
  0: 'FIRST', 
  10: 'SECOND', 
  20: 'THIRD', 
} as const;

接下来,我们通过TypeScript的类型操作符来提取值的联合类型:

// 先获取对象的类型
type MyObjectType = typeof myObject;
// 再获取对象所有键的联合类型
type MyObjectKeys = keyof MyObjectType;
// 最后通过索引访问,得到所有值的联合类型
type AwesomeType = MyObjectType[MyObjectKeys];

当然,你也可以把这几步合并成一行,更简洁:

type AwesomeType = typeof myObject[keyof typeof myObject];

现在AwesomeType就完全等同于你想要的'FIRST' | 'SECOND' | 'THIRD'啦!

简单解释一下原理:

  • typeof myObject:获取myObject的具体类型(因为加了as const,所以是{ readonly 0: "FIRST"; readonly 10: "SECOND"; readonly 20: "THIRD"; })
  • keyof typeof myObject:获取这个类型所有键的联合类型,也就是0 | 10 | 20
  • typeof myObject[keyof typeof myObject]:用键的联合类型去索引对象类型,得到所有对应值的联合类型,也就是目标类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:33:14