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

如何从TypeScript对象值中提取联合类型别名?

从TypeScript对象提取指定联合类型的方法

要从给定对象中提取目标联合类型,按以下两步操作即可:

1. 保留字面量类型信息

默认情况下TypeScript会把数组推断成宽泛的string[],无法直接提取具体字符串字面量。给对象添加as const断言,强制TS保留精确的字面量类型:

const test = {
  'a': ['music','bbq','shopping'],
  'b': ['move','work']
} as const;

2. 用类型操作符提取联合类型

通过TypeScript的类型工具逐层获取目标类型:

// 简洁合并写法
type Types = typeof test[keyof typeof test][number];

// 分步写法(更易理解)
// 先拿到对象所有属性值的类型
type TestValueTypes = typeof test[keyof typeof test];
// 再从数组类型中提取元素的联合类型
type Types = TestValueTypes[number];

原理拆解

  • typeof test:获取test对象的精确类型,包含只读属性和字面量数组类型
  • keyof typeof test:得到对象键的联合类型"a" | "b"
  • typeof test[keyof typeof test]:通过键联合类型索引,得到所有属性值的类型(两个只读数组类型的联合)
  • [number]:对数组类型进行索引,提取出数组元素的字面量联合类型,也就是最终需要的'music' | 'bbq' | 'shopping' | 'move' | 'work'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 07:27:36