与联合类型名称一样无法理解,交叉类型表示将多种类型组合到一起,从而得到具有所需所有功能的单一类型。
例如:
interface DogInterface {
run(): void;
}
interface CatInterface {
jump(): void;
}
// 定义一个交叉类型
type Animal = DogInterface & CatInterface;
let animal: Animal = {
run() {},
jump() {},
};
上面定义了两个接口类型DogInterface
、CatInterface
,然后定义了Animal
交叉类型,定义animal
的类型为Animal
,因此 animal 这个对象必须实现两个接口类型中所有的属性和方法。
交叉类型最多的应用在Mixin
上面,将两个对象合并成一个对象,那么结果对象的类型就是这两个对象类型的交叉类型。例如下面一段代码
function extend<T, U>(first: T, second: U): T & U {
let result: T & U = {};
//.....一些操作
return result;
}
交叉类型没有太多难点,基本上理解了名字就理解了用法,实践主要还是和其他高级类型一起来使用。