我有一个使用 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
];
关于javascript - Typescript 中的 const 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40227401/