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
这似乎混淆了 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.a
与 Test[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
在尝试比较数字枚举时,我注意到一个错误,其中枚举值被转换为字符串类型。这是预期的行为吗?
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
这似乎混淆了 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.a
与 Test[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