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

ES2015环境下如何仅遍历字符串值TypeScript Enum的键

解决方案

你遇到的枚举同时返回键值的问题,是因为你给字符串枚举的值添加了不必要的<any>类型断言,TypeScript会将该枚举判定为非纯字符串枚举,自动生成「键→值」「值→键」的双向映射,所以Object.keys会返回所有键和值。以下两种方案均完全兼容ES2015运行环境:

方案1:修正枚举写法(最优解,无额外性能损耗)

直接去掉<any>断言,TypeScript原生支持字符串枚举赋值,修正后编译出的枚举对象仅存在正向映射,直接调用Object.keys即可拿到所有纯键。

// 无需<any>断言的标准字符串枚举写法
enum School {
    Denver      = "Denver School",
    Wyoming     = "Wyoming High School",
    Michigan    = "Michigan Junior High",
}
const stringKeys = Object.keys(School);
console.log('the actual keys:');
for (const key of stringKeys) {
    console.log(key);
}
// 输出结果:
// Denver
// Wyoming
// Michigan

方案2:兼容旧枚举写法(必须保留时使用)

如果旧代码不允许修改枚举定义,可以通过ES2015原生支持的Set做值过滤,筛选出纯键:

enum School {
    Denver      = <any>"Denver School",
    Wyoming     = <any>"Wyoming High School",
    Michigan    = <any>"Michigan Junior High",
}
// 先收集所有枚举值存入Set
const valueSet = new Set(Object.keys(School).map(key => School[key]));
// 过滤掉属于值的键,剩下的就是原始枚举键
const stringKeys = Object.keys(School).filter(key => !valueSet.has(key));

console.log('the actual keys:');
for (const key of stringKeys) {
    console.log(key);
}
// 输出结果:
// Denver
// Wyoming
// Michigan

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:24:01