【问题标题】:const enum in Typescript打字稿中的常量枚举
【发布时间】:2017-03-06 18:15:53
【问题描述】:

我有一个使用 Typescript 的 React 应用程序。现在我遇到了 const enum 的问题。这是我的枚举:

export const enum Snack {
    Apple = 0,
    Banana = 1,
    Orange = 2,
    Other = 3
}

我试图匹配的服务不​​是返回值,而是枚举中项目的索引。因此,例如,如果用户设置为吃苹果零食,则服务会为该用户返回 0 而不是“Apple”。理想情况下,我想做这样的事情:

var snackIndex = UserSnack.type; // returning 0 in this example
var userSnack = Snack[snackIndex]; // would return 'Apple'

当我尝试类似的事情时,我收到以下错误:

错误 TS2476:只能使用字符串文字访问 const 枚举成员。

由于我从中接收数据的服务不返回字符串,因此我在使其正常工作时遇到了问题。

感谢任何帮助。

【问题讨论】:

    标签: javascript typescript enums


    【解决方案1】:

    只需删除 const 修饰符即可。

    const in an enum 表示枚举在编译期间被完全擦除。常量枚举成员在使用站点内联。您不能按任意值对其进行索引。 也就是说,下面的 TypeScript 代码

    const enum Snack {
      Apple = 0,
      Banana = 1,
      Orange = 2,
      Other = 3
    }
    
    let snacks = [
      Snack.Apple,
      Snack.Banana,
      Snack.Orange,
      Snack.Other
    ];
    

    编译为:

    let Snacks = [
        0 /* Apple */,
        1 /* Banana */,
        2 /* Orange */,
        3 /* Other */
    ];
    

    与非常量版本比较:

    enum Snack {
      Apple = 0,
      Banana = 1,
      Orange = 2,
      Other = 3
    }
    
    let Snacks = [
      Snack.Apple,
      Snack.Banana,
      Snack.Orange,
      Snack.Other
    ];
    

    编译成:

    var Snack;
    (function (Snack) {
        Snack[Snack["Apple"] = 0] = "Apple";
        Snack[Snack["Banana"] = 1] = "Banana";
        Snack[Snack["Orange"] = 2] = "Orange";
        Snack[Snack["Other"] = 3] = "Other";
    })(Snack || (Snack = {}));
    let Snacks = [
        Snack.Apple,
        Snack.Banana,
        Snack.Orange,
        Snack.Other
    ];
    

    来源:const enums @ typescriptlang.org

    【讨论】:

    猜你喜欢
    • 2017-06-20
    • 2020-02-13
    • 2020-04-30
    • 1970-01-01
    • 2020-01-29
    • 2017-05-09
    • 1970-01-01
    • 2017-06-08
    • 2020-10-27
    相关资源
    最近更新 更多