enum MixedEnum {
A = 1,
B = 'b',
C = 'B',
D = '2'
}
上面的代码是字符串和数字混合的枚举。我想迭代MixedEnum
的值。例如,[1, 'b', 'B', '2']
或键['A', 'B', 'C', 'D']
。有简单的方法吗?
答案 0 :(得分:0)
为什么要使用混合枚举??我什至不知道那是不允许的!
您可能已经知道,数值型枚举成员将其键名和值都保存在MixedEnum
对象上,而字符串型成员只保存了其键名。因此,您可以通过过滤掉MixedEnum
的数字成员来迭代键。我们可以从TypeScript checker的检查中找到禁止进行过滤的精确方法,该检查禁止使用数字命名的成员:
if (isNumericLiteralName(text) && !isInfinityOrNaNString(text)) {
error(member.name, Diagnostics.An_enum_member_cannot_have_a_numeric_name);
}
其中:
function isNumericLiteralName(name: string | __String) {
// [comments omitted]
return (+name).toString() === name;
}
因此迭代代码为:
for (let item in MixedEnum) {
if ((+item).toString() === item && 0 * (+item) === 0) continue;
// item is a key, MixedEnum[item] is its value; process
}