打字稿:如何检查一个值是不是是有效的枚举键值? [复制]
Posted
技术标签:
【中文标题】打字稿:如何检查一个值是不是是有效的枚举键值? [复制]【英文标题】:Typescript: How to check if a value is a valid Enum key value? [duplicate]打字稿:如何检查一个值是否是有效的枚举键值? [复制] 【发布时间】:2019-12-29 09:10:14 【问题描述】:有没有办法在打字稿中获取枚举的名称,例如nameof(FirstEnum)
?以下代码有一个丑陋的 if 开关,每次定义新枚举时都必须扩展它。在打字稿中是否有更通用的方法来实现相同的目标?
enum FirstEnum
First = 0,
Second = 1,
Third = 2,
enum SecondEnum
One,
Two,
function translateEnum(type$, val): string
let lookupKey = '';
if (type$ === FirstEnum)
lookupKey = `firstenum.$FirstEnum[val]`;
else if (type$ === SecondEnum)
lookupKey = `secondenum.$SecondEnum[val]`;
else
throw new Error('not supported');
//lookupkey example: secondenum.One
const result = ''; //translate here, ex. await translationService.translate(lookupkey);
return result;
translateEnum(SecondEnum , SecondEnum.One);
【问题讨论】:
【参考方案1】:由于 Typescript Enums
被转换为 javascript 对象,您可以使用 in
运算符检查 enum
键值是否是 enums
的成员。请注意,这仅适用于不是const
并且基于数字的enums
。
enum FirstEnum
First = 0,
Second = 1,
Third = 2,
enum SecondEnum
One,
Two,
function translateEnum(val: FirstEnum | SecondEnum): string
let lookupKey = '';
if (val in FirstEnum || val in SecondEnum)
console.log(`Enum value $val is valid!`);
//lookupkey example: secondenum.One
const result = ''; //translate here, ex. await translationService.translate(lookupkey);
return result;
else
console.log(`Enum value $val not supported.`);
throw new Error('not supported');
translateEnum(SecondEnum.One);
translateEnum(10);
输出
Enum value 0 is valid!
Enum value 10 not supported.
Uncaught Error: not supported
at translateEnum (eval at <anonymous> (main-0.js:804), <anonymous>:23:15)
at eval (eval at <anonymous> (main-0.js:804), <anonymous>:27:1)
at main-0.js:804
更多信息
查看堆栈溢出问题Check if value exists in enum in TypeScript。
【讨论】:
恕我直言,提问者希望从枚举FirstEnum
中获取 "FirstEnum"
。不过我认为这是不可能的。
Tnx 全部支持。我从这个答案中得出结论,不可能摆脱 if 语句。如果可能的话,我希望这个功能能尽快添加到 typescript 中。以上是关于打字稿:如何检查一个值是不是是有效的枚举键值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章