【问题标题】:operator === will always return 'false' since the types have no overlapoperator === 将始终返回“false”,因为类型没有重叠
【发布时间】:2019-06-16 19:11:04
【问题描述】:

我有这个代码

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】:

我知道,我有点晚了,但您的问题的替代解决方案是 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)) {
  
}

【讨论】:

    【解决方案2】:

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

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

    let newStatus: Example = Example.First as Example;
    

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

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

    我更喜欢更改比较,因为它是编译器正在抱怨的那一行,但这完全取决于你有多少比较与你有多少分配,以及你觉得哪个更容易理解。

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 2019-07-03
      • 2020-01-05
      • 1970-01-01
      • 2021-09-16
      • 2023-04-01
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      相关资源
      最近更新 更多