如何遍历TypeScript枚举且避免通过键取值时出现undefined?
问题出在你用了for...in遍历Object.keys(MyEnum)返回的数组——for...in迭代的是数组的索引('0'、'1'这类字符串),而不是枚举的键(VALUE1、VALUE2),所以用这些索引去访问MyEnum自然拿不到对应值。
给你两种正确的实现方式:
方式一:用for...of遍历枚举键数组
Object.keys(MyEnum)会直接返回枚举的键数组['VALUE1', 'VALUE2'],用for...of循环每个键,就能正确获取对应值:
for (const key of Object.keys(MyEnum)) { console.log('键:', key); // 加类型断言让TS类型检查通过,避免报错 console.log('对应值:', MyEnum[key as keyof typeof MyEnum]); }
方式二:用Object.entries直接获取键值对(更适合构建选择菜单)
如果你的目标是生成选择菜单的选项数组,Object.entries可以一步拿到键值对,直接映射成需要的结构:
const selectOptions = Object.entries(MyEnum).map(([enumKey, enumValue]) => ({ value: enumKey, // 枚举键作为选项值 label: enumValue // 枚举值作为选项标签 })); console.log(selectOptions); // 输出结果: // [ // { value: 'VALUE1', label: 'brown' }, // { value: 'VALUE2', label: 'green' } // ]
这样就能完美满足你构建选择菜单的需求了。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

