请考虑以下代码。我以为我可以遍历枚举并将其实例传递给以枚举为参数的函数。
但是,似乎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)
}
答案 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循环通常不适用于没有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
的条目。