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

使用typescript迭代枚举并分配给枚举

  •  0
  • Konzy262  · 技术社区  · 6 年前

    我试图遍历枚举中的所有值,并将每个值赋给一个新的枚举。这就是我想到的……

    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' .

    如果我在上面徘徊 suit 在for循环中,它向我展示 let suit: string . var color : Color = Color[myValue]; 编译时也不会出错。在这里我做错了什么,因为西装和颜色的例子看起来和我一模一样。

    我在2.9.2版的typescript上,这是tsconfig.json的内容

    {
        "compilerOptions": {
            "target": "es6",
            "module": "commonjs",
            "sourceMap": true
        }
    }
    

    是否有更好的方法可以迭代枚举中的所有值,同时为每个迭代维护枚举类型?

    谢谢,

    1 回复  |  直到 6 年前
        1
  •  3
  •   Jevgeni    6 年前

    您可以使用此黑客:

    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;
    }