如何在Typescript中从嵌套数组的常量对象生成联合类型?
实现方案
步骤1:给常量对象添加const断言
首先需要确保你的常量对象的类型被TypeScript正确收窄到字面量类型,否则colors字段会被推断为string[],无法提取具体的颜色字面量:
const rack = { topShelf: { colors: ["red", "green"], }, middleShelf: { colors: ["yellow", "blue"], }, bottomShelf: { colors: ["orange", "purple"], }, // 此处添加const断言 } as const;
步骤2:编写通用提取类型
不需要手动枚举每个顶层字段,用以下类型自动遍历所有字段提取联合类型:
type ExtractObjectColor<T> = T[keyof T]["colors"][number]; // 直接使用即可生成目标联合类型 type Color = ExtractObjectColor<typeof rack>; // 此时Color的类型就是:"red" | "green" | "yellow" | "blue" | "orange" | "purple"
类型逻辑说明
keyof T会自动获取常量对象所有顶层键的联合,不管你有3个还是30个字段都能自动覆盖T[keyof T]获取所有顶层键对应子对象的联合类型- 最后通过
["colors"][number]提取所有子对象colors数组的元素联合类型
内容的提问来源于stack exchange,提问作者yaforsh
相关产品推荐
相关产品推荐

