如何从含word属性的对象数组提取字符串字面量联合类型?
从对象数组提取字符串字面量联合类型
要从给定的对象数组中得到目标的字符串字面量联合类型,分两步操作即可:
- 用
as const断言锁定数组类型
默认情况下TypeScript会把数组里的word值推断为宽泛的string类型,需要用as const强制TypeScript保留每个值的字面量类型:
const array = [{word:"apple"}, {word:"banana"}, {word:"melon"}] as const;
- 通过类型查询提取目标联合类型
利用TypeScript的类型操作符,先获取数组元素的类型,再提取word属性的类型:
type Test = typeof array[number]["word"];
此时Test的类型就是"apple" | "banana" | "melon",完全符合需求。
补充说明
as const会将数组及其内部对象都转为只读字面量类型,确保每个word的具体值被TypeScript精确识别,而不是被宽泛化为string。typeof array[number]表示取数组中任意元素的类型,得到的是三个对象字面量的联合类型;再通过["word"]访问每个对象的word属性,最终合并出目标的字符串字面量联合类型。
内容的提问来源于stack exchange,提问作者최승호
相关产品推荐
相关产品推荐

