我试图遍历枚举中的所有值,并将每个值分配给一个新的枚举。这就是我想出的。...
enum Color {
Red, Green
}
enum Suit {
Diamonds,
Hearts,
Clubs,
Spades
}
class Deck
{
cards: Card[];
public fillDeck() {
for (let suit in Suit) {
var mySuit: Suit = Suit[suit];
var myValue = 'Green';
var color : Color = Color[myValue];
}
}
}
部分var mySuit: Suit = Suit[suit];
无法编译,并返回错误Type 'string' is not assignable to type 'Suit'
。
如果我将鼠标悬停在for循环中的suit
上,则会显示let suit: string
。 var color : Color = Color[myValue];
也会正确编译。我在这里做错了什么,因为“西装”和“颜色”的两个示例都与我相同。
我使用的是TypeScript 2.9.2版,这是我的tsconfig.json的内容
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"sourceMap": true
}
}
是否有更好的方法来遍历枚举中的所有值,同时保持每次迭代的枚举类型?
谢谢
答案 0 :(得分:3)
您可以使用此技巧:
const mySuit: Suit = Suit[suit] as any as Suit;
或将Suit
枚举更改为字符串枚举并按如下方式使用它:
enum Suit {
Diamonds = "Diamonds",
Hearts = "Hearts",
Clubs = "Clubs",
Spades = "Spades",
}
for (let suit in Suit) {
const mySuit: Suit = Suit[suit] as Suit;
}
答案 1 :(得分:2)
对于字符串枚举,如果打开strict
标志,我们将得到type string can't be used to index type 'typeof Suit'
。
所以我们必须像这样:
for (const suit in Suit) {
const mySuit: Suit = Suit[suit as keyof typeof Suit];
}
如果只需要它的string
值,那么直接使用suit
就可以了。