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

时间:2019-04-08 22:04:16

标签: typescript enums

请考虑以下代码。我以为我可以遍历枚举并将其实例传递给以枚举为参数的函数。

但是,似乎let color in Colors产生了color类型的字符串而不是Colors类型的字符串。我在某处缺少演员吗?为什么enum循环不产生所述Enum的值?

enum Colors {
    Red = "Red",
    Green = "Green",
    Yellow = "Yellow"
}

for (let color in Colors) {
  doStuff(color);
}

function doStuff(mycolor: Colors) {
  console.log(mycolor)
}

1 个答案:

答案 0 :(得分:3)

将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]));

还请记住, for循环通常不适用于没有ifswitch语句的事物。有趣的是,如果确实向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的条目。