javascript - Typescript 中的 const 枚举

标签 javascript typescript enums

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

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 修饰符即可。

枚举中的

const 表示枚举在编译期间被完全删除。 Const 枚举成员在使用站点内联。您不能通过任意值对其进行索引。 换句话说,下面的 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

关于javascript - Typescript 中的 const 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40227401/

相关文章:

javascript - 在 Javascript 中正确格式化 JSON 数组

javascript - Google Analytics 会干扰 Android 浏览器中的 history.back() 吗?

Angular - 单击时更改图标颜色

javascript - DOM 导航 : eliminating the text nodes

javascript - bootstrap.min.js 3.0.0 中缺少 jQuery

javascript - 在 Angular 服务中将上传的文件转换为 base64

reactjs - 如何在TypeScript中使用useImperativeHandle输入React的forwardRef?

c++ - 在模板类中时枚举中的整数溢出

VBA:将函数参数限制为仅选定的值?

python - 如何测试是否存在具有特定名称的 Enum 成员?