假设我有这个 const 枚举定义:
const enum Snack {
Apple = 0,
Banana = 1,
Orange = 2,
Other = 3
}
Run Code Online (Sandbox Code Playgroud)
在我的打字稿代码中,可以获取其中一个成员的字符串文字吗?
在 C# 中,它将是例如nameof(Snack.Orange). (我知道 typescript 不支持 nameof 并且我知道非常量枚举是如何可能的。)
默认情况下,const 枚举在编译时被完全删除,因此没有代表枚举的运行时对象。您可以使用preserveConstEnums强制生成枚举对象。问题是编译器仍然不允许您访问枚举对象,因此您必须使用变通方法来访问枚举。
随着preserveConstEnums开启,我们可以把枚举在命名空间:
namespace enums {
export const enum Snack {
Apple = 0,
Banana = 1,
Orange = 2,
Other = 3
}
}
let enumName = (enums as any).Snack[enums.Snack.Apple];
Run Code Online (Sandbox Code Playgroud)
或者,如果枚举在模块内:
export const enum Snack {
Apple = 0,
Banana = 1,
Orange = 2,
Other = 3
}
let enumName = (exports as any).Snack[Snack.Apple];
Run Code Online (Sandbox Code Playgroud)
如果你不想使用这个标志,你可以创建一个对象,根据它的定义,它必须包含枚举的所有成员,你可以在这个对象中搜索名称。鉴于如果您从枚举中添加或删除任何内容,您将在此对象上收到编译时错误,这可能是一个可用的解决方法:
let SnackNames : { [P in keyof typeof Snack]: { Name: P, Value: typeof Snack[P] } } = {
Apple : { Value: Snack.Apple, Name: "Apple" },
Banana : { Value: Snack.Banana, Name: "Banana" },
Orange : { Value: Snack.Orange, Name: "Orange" },
Other : { Value: Snack.Other, Name: "Other" },
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3221 次 |
| 最近记录: |