如何在打字稿中迭代字符串和数字混合枚举?


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
}

最新更新