enum MixedEnum {
A = 1,
B = 'b',
C = 'B',
D = '2'
}
上面的代码是一个字符串和数字混合枚举。我想迭代MixedEnum
的值。例如,[1, 'b', 'B', '2']
或键['A', 'B', 'C', 'D']
。它有一个简单的方法可以做吗?
你为什么要使用混合枚举? 我不知道这是允许的!
您可能知道,数字值枚举成员的键和值都保存在MixedEnum
对象上,而字符串值成员仅保存其键。 因此,您可以通过过滤掉MixedEnum
的数字命名成员来迭代键。 我们可以从 TypeScript 检查器的检查中获得有关过滤的精确方法的提示,该检查不允许以数字命名的成员:
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
}