代码之家  ›  专栏  ›  技术社区  ›  AngryHacker

如何从循环中传递枚举参数?

  •  0
  • AngryHacker  · 技术社区  · 5 年前

    考虑下面的代码。我假设我可以循环遍历一个枚举,并将它的一个实例传递给一个以该枚举为参数的函数。

    然而,似乎 let color in Colors 产生 color 字符串类型而不是类型 Colors . 我是不是少了一个演员?为什么枚举循环不产生所述枚举的值?

    enum Colors {
        Red = "Red",
        Green = "Green",
        Yellow = "Yellow"
    }
    
    for (let color in Colors) {
      doStuff(color);
    }
    
    function doStuff(mycolor: Colors) {
      console.log(mycolor)
    }
    
    1 回复  |  直到 5 年前
        1
  •  3
  •   Ali Habibzadeh    5 年前

    使用Object.values对象值至于for循环,则将其视为在对象上迭代

    enum Colors {
      Red = "Red",
      Green = "Green",
      Yellow = "Yellow"
    }
    
    function doStuff(mycolor: Colors): void {
      console.log(mycolor);
    }
    
    Object.values(Colors).forEach(color => doStuff(color));
    

    我猜颜色只是值而不是枚举项,因为您也可以使用它:

    Object.entries(Colors).forEach((color: [string, Colors]) => doStuff(color[1]));
    

    还要记住 一般来说,对于那些没有 if switch 声明。有趣的是,如果您确实向for循环添加了更深入的逻辑,那么TypeScript将确定类型:

    for (const color in Colors) {
      if (color === Colors.Green) { 
        // Now the cat is either dead or alive 
        doStuff(color);
      }
    }
    

    Object.entries项目仍然是新的,所以请确保 tsconfig.json 正在引用 es2017 compilerOptions/lib .