结合使用时键入并集和交集

Type union and intersection when used in conjunction

我最近开始学习 TypeScript,对类型 intersection/union 概念有点困惑。在下面的代码片段中,我假设编译器应该警告有关缺少参数 z 的错误,但它不会。

interface DataA { x: string, y: string, z: string }
interface DataB { x: string }
interface A { id: string, data: DataA }
interface B { id: string, data: DataB }

type C = A & B
type D = B
type X = C | D

function bar(val: X) {}

bar({
  id: "some id",
  data: {
    x: "some data",    
    y: "some data"
  }
});

type X = C | D = (A & B) | B 并且由于 A & BB 的更严格版本,因此类型 X 的最低要求是 B,您的分配数据满足 B 的所有必填字段,与 B 相比,甚至还有 y 的附加字段,因此它可以分配给 X