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

问题描述 投票:2回答:1

我有这个代码

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
}

预期:没有错误

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

typescript visual-studio-code
1个回答
0
投票

根据@ titian-cernicova-dragomir的评论以及Why boolean becomes true?上的答案,您可以将一个强制转换操作符强制编译器将枚举视为枚举,而不仅仅是它认为已分配的枚举的最后一个值。

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

let newStatus: Example = Example.First as Example;

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

if (newStatus === (Example.Second as Example)) {
  // do something
}

我更喜欢改变比较,因为它是编译器正在调整的线,但它完全取决于你有多少比较你有多少分配,哪些你感觉更容易理解。

© www.soinside.com 2019 - 2024. All rights reserved.