运算符 === 将始终返回 'false',因为类型没有重叠

Ayu*_*wal 8 typescript visual-studio-code

我有这个代码

enum Example {
  First = "First",
  Second = "Second"
}

let a = [1, 2];

let newStatus: Example = Example.First;

a.forEach(i => {
  newStatus = Example.Second;
});

if (newStatus === Example.Second) {
  // do something
}
Run Code Online (Sandbox Code Playgroud)

预期:没有错误

实际:错误:[ts] 此条件将始终返回 'false',因为类型 'Example.First' 和 'Example.Second' 没有重叠。[2367]

Dan*_*n F 12

根据 @titian-cernicova-dragomir 的评论和“为什么布尔值变为真?”的答案 您可以放入一个强制转换运算符来强制编译器将枚举视为枚举,而不仅仅是它认为分配的枚举的最后一个值。

因此,根据您的情况,您可以将第 8 行更改为

let newStatus: Example = Example.First as Example;
Run Code Online (Sandbox Code Playgroud)

或者,如果这不能解决问题,您可以更改比较本身

if (newStatus === (Example.Second as Example)) {
  // do something
}
Run Code Online (Sandbox Code Playgroud)

我更喜欢更改比较,因为这是编译器呕吐的那一行,但这完全取决于您有多少比较与您有多少赋值,以及哪一个对您来说更容易理解。