带有布尔值的受歧视联合

Neo*_*eok 2 typescript

问题

与布尔类型的歧视联合似乎仅适用于真正的关联类型。

复制者

interface DummyA {
  hint: true
  a: string
}

interface DummyB {
  hint: false
  b: string
}

type Dummy =
  | DummyA
  | DummyB;

const dummies: Dummy[] = [
  {
    hint: true,
    a: "a"
  },
  {
    hint: false,
    b: "b"
  }
]

dummies.forEach(value => {
  if (value.hint) {
    value.a
  } else {
    value.b
  }
})
Run Code Online (Sandbox Code Playgroud)

预期结果

如果它与 true 一起工作,它也应该与 false 一起工作。这是正常行为,还是更像是一个问题?

Tit*_*mir 6

如果您使用strictNullChecks它,它将按预期工作。如果您不使用严格的空检查(正如我根据您的问题怀疑的那样),如果您使用=== true


dummies.forEach(value => {
  if (value.hint === true) {
    value.a
  } else {
    value.b
  }
})
Run Code Online (Sandbox Code Playgroud)

游乐场链接

  • 如果不需要 strictNullChecks,为什么需要 `=== true` ?如果编译器担心可能未定义“hint”,那么检查“value.hint”是否就足够了? (2认同)