运算符===总是返回“ false”,因为类型没有重叠

时间:2019-01-23 08:41:14

标签: 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
}

预期:没有错误

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

2 个答案:

答案 0 :(得分:0)

根据@ titian-cernicova-dragomir的评论以及对Why boolean becomes true?的回答,您可以使用强制转换运算符来强制编译器将枚举视为枚举,而不仅仅是枚举的最后一个值。它以为是分配的。

因此,您可以将第8行更改为

let newStatus: Example = Example.First as Example;

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

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

我更喜欢更改比较,因为这是编译器无法进行的工作,但这完全取决于您有多少个比较与您有多少个分配,并且哪个对您来说更容易理解。

答案 1 :(得分:0)

我知道,我来晚了,但是您的问题的替代解决方案是ES6 includes方法,用于检查打字稿中带有字符串,类型或枚举的条件。为了更好的理解,请参见代码。

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

let a = [1, 2];

let newStatus: Example = Example.First;

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

if (newStatus.includes(Example.Second)) {
  
}