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

TypeScript 遍历枚举时如何为枚举的键添加正确的类型标注

TypeScript 遍历枚举时正确标注键类型的方案

核心原因:Object.keys() 的返回值默认类型为 string[],这是 TypeScript 的有意设计(运行时对象可能携带类型定义外的额外属性),因此直接用返回值作为枚举索引会触发类型报错,用any又会丢失类型检查能力,可通过以下两种方式解决:

  • 方案1:直接添加类型断言
    把遍历拿到的key断言为keyof typeof WeekdayKeys类型即可,该类型是枚举所有键的字面量联合类型,和枚举的有效键完全匹配:

    Object.keys(WeekdayKeys).forEach((key) => {
      const typedKey = key as keyof typeof WeekdayKeys;
      console.log(WeekdayKeys[typedKey]);
    });
    
  • 方案2:封装通用工具函数(推荐复用)
    可以把类型断言的逻辑封装成通用的枚举键获取函数,后续所有枚举遍历都可以直接使用,自动推导正确类型:

    function getEnumKeys<T extends object>(enumObj: T): Array<keyof T> {
      return Object.keys(enumObj) as Array<keyof T>;
    }
    
    // 调用时不需要额外标注类型
    getEnumKeys(WeekdayKeys).forEach(key => {
      console.log(WeekdayKeys[key]);
    });
    

注意:以上方案对你使用的字符串枚举完全适用。如果是数字枚举,Object.keys() 会同时返回枚举名和枚举值的字符串形式,需要额外做过滤处理才能拿到正确的枚举键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:30:02