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

TypeScript中如何获取Enum枚举对应的字符串值而非数字值

问题原因

首先你写Person实例的语法有个小错误:TypeScript里类型标注是跟在变量名后面,正确写法是const john: Person = { ... },不要用Java那种Person john =的声明格式。

回到枚举的问题:TypeScript默认的数字枚举编译为JavaScript后会生成双向映射结构,你定义的Status枚举编译后的实际JS代码如下:

var Status;
(function (Status) {
    Status[Status["Single"] = 0] = "Single";
    Status[Status["Married"] = 1] = "Married";
    Status[Status["Divorced"] = 2] = "Divorced";
})(Status || (Status = {}));

你直接访问john.status拿到的是枚举对应的正向数字值,自然拿不到对应的字符串文本。

可用解决方案
  • 利用数字枚举自带的反向映射直接取值
    这是最简单的方式,数字枚举本身就支持通过数字值反查对应的字符串键,直接写就能拿到结果:

    // 加!是非空断言,因为你接口里status是可选属性,确定该属性有值时可以用
    const johnStatusText = Status[john.status!];
    console.log(johnStatusText) // 输出 "Married"
    

    注意:该方法仅对默认数字枚举生效,字符串枚举没有反向映射,无法使用。

  • 从定义层面改用字符串枚举
    如果你不需要枚举对应数字值,直接定义字符串枚举即可,后续访问属性时拿到的直接就是字符串文本,不需要额外转换:

    export enum Status {
      Single = "Single",
      Married = "Married",
      Divorced = "Divorced"
    }
    // 此时john.status直接返回"Married"
    
  • 封装通用转换方法
    如果项目里有大量枚举值转文本的需求,可以封装通用方法复用:

    function getEnumLabel<T extends Record<string, string | number>>(
      enumTarget: T,
      enumValue: T[keyof T]
    ) {
      return enumTarget[enumValue] as string;
    }
    
    // 调用示例
    const johnStatusText = getEnumLabel(Status, john.status!);
    

内容的提问来源于stack exchange,提问作者HeyLameRobin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:33:19