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
相关产品推荐
相关产品推荐

