“&”和“|”有什么区别 在打字稿中

gar*_*gao 1 typescript

从打字稿的文档中,我知道“&”表示“交叉类型”和“|” 代表“联合类型”。但我想知道与以下示例有什么区别:

  type Type1 = number | boolean;
  type Type2 = number & boolean;
Run Code Online (Sandbox Code Playgroud)

rgu*_*rin 6

从官方打字稿文档:

联合类型描述的值可以是多种类型之一。我们使用竖线 (|) 来分隔每种类型,因此编号 | 字符串 | boolean 是值的类型,可以是数字、字符串或布尔值。

交集类型将多种类型合二为一。这允许您将现有类型添加在一起以获得具有您需要的所有功能的单一类型。例如,Person & Serializable & Loggable 是一个 Person 和 Serializable and Loggable。这意味着这种类型的对象将具有所有三种类型的所有成员。

用像 number 或 boolean 这样的原始类型来解释它不会那么相关,但想象一下有两个这样的类:

export class Toto {

 FirstName: string;
 LastName: string;

}

export class Tata {

 PhoneNumber: number;

}
Run Code Online (Sandbox Code Playgroud)

如果您编写,type Type1 = Toto | Tata;那么您的 Type1 将是 Toto 实例或 Tata 实例,但不能同时是两者。但是如果你写,type Type2 = Toto & Tata;那么你的 Type2 将是一个具有所有 Toto 和 Tata 属性(FirstName、LastName 和 PhoneNumber)的类型。

有关更多详细信息,请参阅文档,那里有很好的解释。