TypeScript枚举如何通过枚举值获取对应的字符串名称?
解决TypeScript枚举值获取字符串名称的问题
我来帮你理清这个问题~首先得搞清楚TypeScript数字枚举的双向映射特性,这是你遇到问题的核心原因。
为什么会返回0而不是"AB1"?
当你定义默认的数字枚举:
export enum Versions { AB1, AB2 }
TypeScript会把它编译成一个双向映射的对象,大致结构是这样的:
const Versions = { AB1: 0, AB2: 1, 0: "AB1", 1: "AB2" };
也就是说,它同时存储了枚举名称→数字值和数字值→枚举名称的映射关系。
你遇到的Versions[version]返回0的情况,大概率是因为你的version变量实际存储的是字符串"AB1"而不是数字0——比如如果不小心把version赋值成了枚举的名称字符串,那Versions["AB1"]就会返回对应的数字值0,这就和你预期的反过来了。
正确获取枚举值对应的字符串名称
如果你的version确实是数字枚举值(比如Versions.AB1,也就是0),直接用Versions[version]就能拿到对应的字符串名称:
export enum Versions { AB1, AB2 } // 声明枚举变量 public version: Versions = Versions.AB1; // 获取字符串名称 const versionName = Versions[this.version]; // 结果是"AB1" // 你的对象示例修正后: const body = { name: 'server', version: Versions[Versions.AB1] }; // 此时body.version就是"AB1"
更直观的方案:使用字符串枚举
如果你觉得数字枚举的双向映射容易搞混,推荐直接使用字符串枚举,这样枚举值本身就是字符串,不需要额外的反向查找:
export enum Versions { AB1 = "AB1", AB2 = "AB2" } public version: Versions = Versions.AB1; console.log(this.version); // 直接输出"AB1" const body = { name: 'server', version: this.version }; // body.version自然就是"AB1"
这样就彻底避免了双向映射带来的混淆,代码也更易读。
内容的提问来源于stack exchange,提问作者User 5842
相关产品推荐
相关产品推荐

