在 TypeScript 中以字符串形式获取枚举名称

jur*_*n w 3 enums typescript

我正在尝试找到一种将枚举名称转换为字符串的方法。如果我有下面的 Response 枚举,如何将“Response”转换或提取为字符串?我的一个函数将任何枚举作为输入,我需要名称,而不是执行其他代码的枚举类型。

enum Response 
{
    No = 0,
    Yes = 1 
}
Run Code Online (Sandbox Code Playgroud)

Qwe*_*tiy 5

不,您不能将枚举名称转换为字符串,因为类型信息仅在编译期间存储。您必须传递额外的参数来指定您正在使用的枚举。


但是您可以使用方括号将枚举值转换为字符串并返回:

小提琴

enum YesNo {
    No = 0,
    Yes = 1, 
}

console.log(YesNo[YesNo.Yes]);
console.log(YesNo[YesNo.No]);
console.log(YesNo["Yes"]);
console.log(YesNo["No"]);
console.log(YesNo[1]);
console.log(YesNo[0]);
Run Code Online (Sandbox Code Playgroud)

这段代码编译成:

enum YesNo {
    No = 0,
    Yes = 1, 
}

console.log(YesNo[YesNo.Yes]);
console.log(YesNo[YesNo.No]);
console.log(YesNo["Yes"]);
console.log(YesNo["No"]);
console.log(YesNo[1]);
console.log(YesNo[0]);
Run Code Online (Sandbox Code Playgroud)

  • 对于其他好奇的人来说,“YesNo[1]”不是索引引用,而是值引用。因此,如果 `enum YesNo {No = 0, Yes=8}` 则 `console.log(YesNo[8])` 返回 `Yes`。此外,如果未找到该值,则返回“undefined”。如果多个枚举具有相同的值,例如“enum YesNo {No = 8,Yes=8}”..它将返回枚举中定义的最后一个,因此在这种情况下它将返回“Yes”。 (2认同)