TypeScript如何获取枚举(Enum)的值类型?
关于获取Test枚举类型的问题
首先纠正代码里的拼写错误:x.Value应该改为x.value(属性名是小写的value),否则会因找不到属性而报错。
回到核心问题:无法通过typeof直接获取到Test枚举的类型,原因如下:
- TypeScript的类型信息仅存在于编译阶段,编译后的JavaScript代码中,枚举会被转换为普通对象,类型系统会被完全擦除。
typeof x.value返回的是运行时值的原始类型,这里Test.B是数字类型(默认数字枚举的成员值从0开始递增),所以返回"number"。
如果需要在运行时关联值与Test枚举,可以采用以下几种方式:
- 直接将枚举对象存入变量,比如:
enum Test {A,B}; const x = { name:"Test", value:Test.B, enum: Test }; // 运行时可通过x.enum访问枚举对象,验证值的归属 console.log(x.enum[x.value] === "B"); // 输出true - 利用数字枚举的反向映射特性(TypeScript默认会为数字枚举生成反向映射),通过枚举值反向获取成员名验证归属:
console.log(Test[Test.B]); // 输出"B",说明该值属于Test枚举 - 自定义类型守卫函数,结合枚举对象判断值是否属于目标枚举:
function isTest(val: unknown): val is Test { return Object.values(Test).includes(val); } console.log(isTest(x.value)); // 输出true
内容的提问来源于stack exchange,提问作者Eagle
相关产品推荐
相关产品推荐

