Numeric Enum with 在类型比较中被视为字符串

Numeric Enum with is considered as a string in type comparison

在尝试比较数字枚举时,我注意到一个错误,其中枚举值被转换为字符串类型。这是预期的行为吗?

enum Test {
    a = 0,
    b = 1
}

console.log(Test.a === Test[0]);
// ^ This condition will always return 'false' since the types 'Test' and 'string' have no overlap.(2367)

TypeScript 版本:v4.6.4

Playground Link

这似乎混淆了 Test[0] 是什么。 TypeScript 中的数字 enum 成员得到一个 reverse mapping,其中使用枚举 value 索引到枚举对象会返回相应的枚举 key.

所以在

enum Test {
    a = 0,
    b = 1
}

您有 Test.a === 0,因此 Test[0] === "a"。既然 Test.b === 1,那么 Test[1] === "b"。通过将 Test.aTest[0] 进行比较,您将数字与字符串进行比较,并且确实被认为是进行此类比较的 TypeScript 错误。

所以你不应该写

console.log(Test.a === Test[0]); // error, different types.  Outputs false

但可能是以下之一:

console.log("a" === Test[0]); // okay, Outputs true
console.log(Test.a === 0); // okay, Outputs true

Playground link to code