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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:22:58