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

