在TS中和联合类型(union type)对应的还有交叉类型(intersection type)。
交叉类型的出现主要为了组合多个对象类型(object type),因为相对于interface,object type没法继承,那么就可以通过union type来实现混合的目的,从而实现继承的功能。

type objtype1 = {a: string}
type objtype2 = {b: string}
type objtype = objtype1 & objtype2function logObj(obj: objtype) {console.log(obj.a, obj.b)
}

经过objtype1和objtype2交叉objtype 变成了 {a: string, b: string}。现在的问题是为什么两个对象类型的交叉是两个对象类型的和?
我们知道联合和交叉都是针对集合的运算,两个集合的交叉应该是集合相交的部分:

type type1 = 1 | 2
type type2 = 1 | 3
type typea = type1 & type2

这时的typea1,这个很好理解,因为type11 | 2,可以看成一个集合,这样两个结合的交集就是1这个类型。

我认为要解释两个对象类型的交叉结果是两个对象类型的和,这个问题需要结合类型兼容性去理解。

interface Pet {name: string;
}
let pet: Pet;let dog = { name: "Lassie", owner: "Rudd Weatherwax" };
pet = dog;

上面Pet类型的变量pet可以被dog对象赋值,而dog类型是{name: string, owner: string},所以简理解为Pet和类型{name: string, owner: string}是兼容的,而兼容的方式可以简单理解type Pet = {name: string} | {name: string, owner: string}这样Pet就成了一个集合,而这个集合参与交叉的时候自然会的出和的结果。结论就是一个对象类型在某种情况下表示的是自身类型+任意额外类型组合组成的一个集合。
所以在参与交叉的时候:

type objtype1 = {a: string}
可以被看成
type objtype = {a: string} | {a: string, b: string}
type objtype2 = {b: string}
可以被看成
type objtype2 = {b: string} | {b: string, a: string}

这样两个集合的交集就能得到目标类型{a: string, b: string}

以上是我对交叉类型作用于对象类型的个人理解,并没有找到相关文档给予的支持,仅供参考。

TypeScript 交叉类型(intersection type)相关推荐

  1. TypeScript 联合类型(union type)

    TS是JS的超集,在JS的基础上添加了一套类型系统,这样的TS可以被静态分析带来的好处显而易见. let val: string = 'val'; 声明一个string类型的变量val. let va ...

  2. 关于 TypeScript 联合类型 union type 赋值的一个错误消息

    今天我做开发时遇到如下的 TypeScript 错误: Type 'Observable<boolean | undefined>' is not assignable to type ' ...

  3. TypeScript 的类型推导 Type Inference

    官方链接 在 TypeScript 中,当没有显式类型注释时,有几个地方使用类型推断来提供类型信息. 比如 let a = 3; a 被推导成 number 类型. x 变量的类型被推断为数字. 这种 ...

  4. 读懂 TS 中联合类型和交叉类型的含义

    创建了一个 "重学TypeScript" 的微信群,想加群的小伙伴,加我微信 "semlinker",备注重学TS. 本文是 "重学TS系列" ...

  5. 【ts】typescript高阶:键值类型及type与interface区别

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 typescript高阶之键值类型及type与interface区别 前言 一.键值类型的语法 1.语法 2.错误例子 3.正确例子 ...

  6. TypeScript高级类型:联合类型、交叉类型和类型别名

    目录 引言 联合类型 交叉类型 类型别名 注意 结论 引言 TypeScript 是一门强类型语言,其高级类型功能使得开发者能够更加灵活地定义类型并对其进行操作,以便于更好地编写可维护和可扩展的代码. ...

  7. typescript索引类型_TypeScript类型声明书写详解

    本文总结一下TypeScript类型声明的书写,很多时候写TypeScript不是问题,写类型就特别纠结,我总结下,我在使用TypeScript中遇到的问题.如果你遇到类型声明不会写的时候,多看看lo ...

  8. typescript的类型描述_TypeScript类型声明书写详解

    本文总结一下TypeScript类型声明的书写,很多时候写TypeScript不是问题,写类型就特别纠结,我总结下,我在使用TypeScript中遇到的问题.如果你遇到类型声明不会写的时候,多看看lo ...

  9. TypeScript `unknown` 类型

    unknown 字面理解和 any 其实没差,任何类型都可赋值给它,但有一点, Anything is assignable to unknown, but unknown isn't assigna ...

最新文章

  1. htcd816+android密码,HTC Desire 816刷机解锁教程
  2. NetBeans优化技巧 提升启动速度
  3. WPF之依赖属性和附加属性
  4. 微服务实践:全栈小团队“洪荒之力”改造阿里服务CRM技术体系
  5. python怎么计算图像梯度_opencv python图像梯度实例详解
  6. Leaflet文档阅读笔记-Zoom levels笔记
  7. 通过js跳转url下载包含中文的文件乱码问题解决方案(java)
  8. 文件下载的java代码_文件下载java代码实现
  9. 多项logistic回归系数解释_逻辑回归logistic(含python代码)
  10. 计算机毕业设计java+ssm校友交流论坛(源码+系统+mysql数据库+Lw文档)
  11. Python源码剖析 - Python的总体架构
  12. 把oracle卸载恢复,oracle干净卸载
  13. 老男孩python最新_老男孩Python高级运维自动化实战 老男孩Python高级运维开发10期 全套Python视频教程...
  14. 计算机讲Word文档中的组合,电脑Word文档中两个表格如何合并
  15. buuctf XCTF October 2019 Twice SQL Injection 二次注入原理+题解
  16. node之cookie-parser
  17. 【一起来刷Python题】——09.解决熄灯问题
  18. NVIDIA NCCL优化——利用共享内存实现比NCCL更快的集合通信
  19. 5、异步流(Asynchronous Flow)
  20. 期货现货升跌水(期货下跌现货一定下跌吗)

热门文章

  1. RabbiqMQ快速入门
  2. Android.os.SystemClock
  3. mysql 索引- 笔记
  4. JavaScript学习总结(六)——JavaScript判断数据类型总结
  5. Netty writeAndFlush() 流程与异步
  6. 在wp中,使用NavigationService.Navigate导航页面出现错误
  7. OSI七层网络模型与TCP/IP四层网络模型
  8. AUTOSAR从入门到精通番外篇(二)-一文读懂ld链接脚本文件
  9. PDF.js如何添加放大缩小的功能,转换成图片应该如何实现?
  10. 在HTML中嵌入PHP代码,有以下几种方法,其中错误的是( )