【问题标题】:This condition will always return 'true' since the types have no overlap此条件将始终返回“真”,因为类型没有重叠
【发布时间】:2021-08-30 23:04:42
【问题描述】:

if (this.program.segment !== Segment.Y || this.program.segment !== Segment.C) return text

有 5 个不同的段,我想特别检查 2 个,C 和 Y。如果段是其他 3 个段之一,我想返回文本。否则,执行此语句之后的内容。

为什么这个简单的 OR 检查会报错:这个条件总是返回 'true',因为类型 'Segment.Y' 和 'Segment.C' 没有重叠。我查看了关于 SO 的其他示例,但我看不出它在这里是如何工作的。

【问题讨论】:

  • “x 不是鱼或 x 不是自行车”与“x 不是鱼且 x 不是自行车”不同。第一个永远是真的:如果 x 是一条鱼,那么它就不是自行车,因此是真的。如果 x 是自行车,那么它不是鱼,因此是真的。如果 x 是斑马,那么它既不是鱼也不是自行车,所以仍然正确。
  • 在这种情况下,您需要 AND,而不是 OR。使用 OR,即使 this.program.segmentSegment.YSegment.C 之一,另一个不等式检查将返回 true(它不能是 both Segment.Y and Segment.C 同时),使整个表达式为真。因此你的 linter 错误。
  • if (![Segment.Y, Segment.C].includes(this.program.segment)) return text

标签: javascript typescript


【解决方案1】:

知道了。只需要将其更改为 AND 而不是 OR。谢谢楼上的各位!

【讨论】:

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