如何让TypeScript自动推断枚举反向查找的字面量类型?
问题解答
可行,有两种常用方案:
方案一:使用const enum
将普通枚举改为const enum,TypeScript会在编译阶段完全内联枚举的反向查找结果,直接推断出字面量类型,无需任何断言:
const enum RadCheck { blank = 0, userDefined = 1, macAddress = 2, } const H = RadCheck[RadCheck.blank]; // 类型自动推断为 "blank"
注意:const enum会被编译工具完全内联,不会在运行时生成枚举对象,若需要保留枚举的运行时结构,此方案不适用。
方案二:用对象+as const替代枚举
如果需要保留运行时的映射结构,可以用普通对象结合as const定义枚举,再手动生成反向映射,同样能得到字面量类型:
const RadCheck = { blank: 0, userDefined: 1, macAddress: 2, } as const; // 生成类型安全的反向映射 type RadCheckValue = typeof RadCheck[keyof typeof RadCheck]; const RadCheckReverse = Object.fromEntries( Object.entries(RadCheck).map(([key, val]) => [val, key]) ) as { [Val in RadCheckValue]: keyof typeof RadCheck }; const H = RadCheckReverse[RadCheck.blank]; // 类型自动推断为 "blank"
内容的提问来源于stack exchange,提问作者Islam Y-
相关产品推荐
相关产品推荐

