并集和交集
并集和交集是什么,简单来说:有两个事物A和B,并集是二者内容之和,交集是二者共同拥有的内容,如图:
Typescript中的并集和交集
为了处理类型的并集和交集,Typescript为我们提供了特殊的类型运算符:并集使用|
,交集使用&
,类型和集合之间几乎可以画上等号:
ts
// 并集 --> 符号: |
// 交集 --> 符号: &
type Cat = { name: string, purrs: boolean }
type Dog = { name: string, barks: boolean, wags: boolean }
type CatOrDogOrBoth = Cat | Dog
type CatAndDog = Cat & Dog
如果某个值是CatOrDogOrBoth类型,那么我们将得到什么信息呢?哪些值可以赋值给CatOrDogOrBoth类型的变量呢?可以是Cat类型的,也可以是Dog类型的,还可以二者兼具:
ts
// Cat
let a: CatOrDogOrBoth = {
name: "Bonkers",
purrs: true
}
// Dog
a = {
name: "Domino",
barks: true,
wags: true
}
// 二者兼具
a = {
name: "Donkers",
barks: true,
purrs: true,
wags: true
}
注意: 一个并集类型的值不一定属于并集中某一个成员,还可以同时属于每个成员,但是如果并集不相交,那么值只能属于并集类型中的某个成员
另外,还有一个类型CatAndDog,从这个类型中又能获取到什么信息呢?也就是说你有一个犬猫混种超级宠物,它不仅有名字(name),还能喵喵叫(puur),还可以汪汪叫(bark),还可以摇尾巴(wag):
ts
let b: CatAndDog = {
name: "Domino",
barks: true,
purrs: true,
wags: true
}
在大多数情况下,并集通常比交集更符合常理:
ts
function abTest(a: string, b: number) {
return a || b
}
该函数:如果a是真值,返回类型为string,否则为number,也就是string | number。