24|增强编译器前端功能第3步:全面的集合运算
宫文学
你好,我是宫文学。
在上一节课,我们扩展了我们语言的类型体系,还测试了几个简单的例子。从中,我们已经能体会出一些 TypeScript 类型体系的特点了。
不过,TypeScript 的类型体系其实比我们前面测试的还要强大得多,能够在多种场景下进行复杂的类型处理。
今天这节课,我们会通过多个实际的例子,来探索 TypeScript 的类型处理能力。并且,在这个过程中,你还会进一步印证我们上一节课的一个知识点,就是类型计算实际上就是集合运算。在我们今天的这些例子中,你会见到多种集合运算,包括子集判断、重叠判断,以及交集、并集和补集的计算。
首先,让我们看几个例子,来理解一下类型计算的使用场景。
类型计算的场景
我们先看第一个例子:
在这个例子中,我们用到了 age 和 age1 两个变量,它们都采用了联合类型。一个是 number|null,一个是 string|number。
如果你用–strict 选项来编译这个程序,那么 tsc 会报错:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
TypeScript编译器前端的类型处理能力在增强编译器前端功能方面迈出了重要的一步。本文通过多个实际例子探索了类型计算的使用场景,包括等值比较和大小比较的规则,不同运算符的类型检查规则,子类型和重叠的判断,以及集合运算如交集、并集和补集的计算。文章还深入探讨了数据流分析技术如何动态地改变变量的值域,以及如何综合运用多种语义分析技术来获得更强大的效果。通过这些内容,读者可以快速了解TypeScript编译器前端的类型处理能力,以及类型计算的重要性和应用场景。本文全面地运用了集合计算,展示了TypeScript具备强大的类型处理能力的原因。文章还提出了思考题,鼓励读者将本文介绍的类型计算方式与其他语言进行对比,以及分享对类型计算的发现。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》,新⼈⾸单¥59
《手把手带你写一门编程语言》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- ifelse学习打卡2022-09-23归属地:浙江
- blackonionrust也可以,例如let mut maybe_some = None;maybe_some = Some(666) 编译器可以算出maybe_some的类型是Option<i32>。2021-10-12
- 奋斗的蜗牛之前看typescript编译器的类型检验代码,看得很晕,里面的类型推导是真复杂,谢谢老师讲到这块2021-10-08
收起评论