You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:50:33