交叉类型简介
TypeScript中的交叉类型是指将多个类型合并为一个类型。这使得我们可以将现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性。
写这篇文章先问大家一个问题,如何让一个对象既有a类型约束,又有b类型约束?
如果你看了我这篇文章typescrip接口 interface详解,以及ts实现多态,
那么你就会很轻易的回答我定义接口使用继承,
但使用接口有一个问题,就是当两个接口里面有同名但是不同类型约束时,就会报错,如下
这个时候就得用上交叉类型了
交叉类型(&): 功能类似于接口继承,(extends),用于组合多个类型为一个类型(常用于对象类型).
如下
tips:当使用交叉类型后,新的类型C就同时具备了A和B的所有属性或方法约束,相当于
type C1 = { a: string, b: number }
我们很简单就能证明这个例子
如下图,根据鸭子类型理论,C就是C1
交叉类型与接口继承的区别
交叉类型(&)和接口继承(extends)的对比
- 相同点:都可以实现对象类型的组合
- 不同点:两种方式实现类型组合时,对于同名属性之间,处理类型冲突的方式不同
接口处理同名属性类型冲突: 不允许
交叉类型处同名属性类型冲突
当我们鼠标移上去可以看到