联合类型
联合类型表示一个值可以是几种类型之一。我们用竖线( |
)分隔每个类型,所以 number | string | boolean
表示一个值可以是 number
, string
,或 boolean
。
let gender:number | string = 'M'
let fn = function(type:number | boolean):boolean {
return !!type
}
- 如果一个值是联合类型,我们只能访问此联合类型的所有类型里共有的成员
interface Bird {
fly();
layEggs();
}
interface Fish {
swim();
layEggs();
}
function getSmallPet(): Fish | Bird {
// ...
}
let pet = getSmallPet();
pet.layEggs(); // okay
pet.swim(); // errors
交叉类型
交叉类型是将多个类型合并为一个类型。 这让我们可以把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性。 例如, Person & Serializable & Loggable
同时是 Person
和 Serializable
和 Loggable
。 就是说这个类型的对象同时拥有了这三种类型的成员。
interface User {
name: string
age: number
}
interface Info {
height: number
weight: number
}
let fn = (man: User & Info): void => {
console.log(man)
}
fn({ name: 'zs', age: 18, height: 180, weight: 150 })