我试图找到一种将枚举名称转换为字符串的方法。如果我有以下的 Response 枚举,如何将“Response”转换或提取为字符串?我的其中一个函数以任何枚举作为输入,并且我需要名称而不是枚举类型来执行其他代码。
enum Response
{
No = 0,
Yes = 1
}
enum Response
{
No = 0,
Yes = 1
}
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]);
var YesNo;
(function (YesNo) {
YesNo[YesNo["No"] = 0] = "No";
YesNo[YesNo["Yes"] = 1] = "Yes";
})(YesNo || (YesNo = {}));
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]);
YesNo [1]
不是索引引用,而是值引用。因此,如果 enum YesNo { No = 0, Yes = 8 }
,那么 console.log(YesNo [8])
返回 Yes
。此外,如果找不到该值,则返回 undefined
。如果多个枚举具有相同的值,例如 enum YesNo { No = 8,Yes = 8 }
...它将返回在枚举中定义的最后一个,因此在这种情况下它将返回 Yes
。 - wongzObject.keys({ Response })[0]; // 'Response'
foo=func(Response) ... func getName(obj) { return Object.keys({ obj })[0]
- 并且使用 typeof Response
或类似语法也不起作用。除非有更好的解决方案,否则似乎必须将类型名称作为参数传递进去,因为目前看来它无法被推断出来。 - TonyG@Tukkan提供了正确的答案,但过于模糊难以使用。这里是功能代码,直接响应OP。
enum Options {
yes,
no
}
type EnumType = Record<string, any>
function showEnumName(theEnum: EnumType) {
const enumName = Object.keys(theEnum)[0] ?? ''
console.log(enumName)
}
showEnumName({ Options })
注:
[0]
不是必需的。function showEnumName(theEnum) {
const enumName = Object.keys({ theEnum })
console.log(enumName)
}
showEnumName({ Options })
结果不是"选项",而是"theEnum"。也就是说,正如Tukkan正确指出的那样,它告诉我们包含数据的变量的名称,在函数内部当我们想要传递的枚举的名称时是没有帮助的。
如果您喜欢这个答案,请同时为@Tukkan的答案点赞,让他获得积分。如果没有他的灵感,我无法心安理得地独占积分。
MyEnum[MyEnum.option1]