首页 > 解决方案 > 带布尔值的可区分联合

问题描述

问题

布尔类型的判别联合似乎仅适用于真正的关联类型。

复制器

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
  }
})

预期结果

如果它适用于 true,它应该适用于 false。这是正常行为,还是更像一个问题?

标签: typescript

解决方案


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


dummies.forEach(value => {
  if (value.hint === true) {
    value.a
  } else {
    value.b
  }
})

游乐场链接


推荐阅读