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

如何在TypeScript中获取枚举名称?附库中枚举示例

在TypeScript中获取StorePurchaseStatus枚举的名称

针对你的问题,因为你使用的是数字枚举(枚举值都是数字类型),TypeScript其实自动帮我们做了反向映射,所以获取枚举名称(键)的方法很直接,下面分两种常见场景给你演示:

1. 根据枚举值获取对应的名称

如果你已经有一个枚举值(比如1、2),想拿到它对应的名称(比如alreadyPurchased),直接用枚举名[值]即可,这得益于TypeScript数字枚举的反向映射特性:

// 补全你未写完的枚举定义
enum StorePurchaseStatus {
  /** 当前用户已购买指定的应用或附加组件。 */
  alreadyPurchased = 1,
  /** 购买请求因网络连接错误未成功。 */
  networkError = 3,
  /** 购买请求未成功。 */
  notPurchased = 2,
  /** 购买请求因服务器错误未成功。 */
  serverError = 4
}

// 示例:根据值获取名称
const currentStatusValue = 3;
const statusName = StorePurchaseStatus[currentStatusValue];
console.log(statusName); // 输出 "networkError"

2. 获取所有枚举名称的数组

如果你想一次性拿到这个枚举的所有名称(比如做下拉选项),需要注意TypeScript生成的枚举对象里同时包含正向映射(键→值)和反向映射(值→键),所以我们需要过滤掉数字类型的键:

const allStatusNames = Object.keys(StorePurchaseStatus).filter(key => isNaN(Number(key)));
console.log(allStatusNames); 
// 输出 ["alreadyPurchased", "networkError", "notPurchased", "serverError"]

类型安全的封装(可选)

如果你想确保获取名称的过程是类型安全的,避免传入无效值,可以写一个简单的工具函数:

function getValidStatusName(status: StorePurchaseStatus): keyof typeof StorePurchaseStatus {
  const name = StorePurchaseStatus[status];
  if (typeof name === 'string') {
    return name as keyof typeof StorePurchaseStatus;
  }
  throw new Error(`无效的购买状态值:${status}`);
}

// 使用示例
const validName = getValidStatusName(StorePurchaseStatus.alreadyPurchased);
console.log(validName); // "alreadyPurchased"

补充说明:如果是字符串枚举(枚举值是字符串),TypeScript不会生成反向映射,那时候需要手动维护映射关系,但你的场景是数字枚举,所以上面的方法完全适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:40:52