如何从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
相关产品推荐
相关产品推荐

