手把手带你写一门编程语言
宫文学
北京原点代码 CEO
7534 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
起步篇:让一门超简单的语言跑起来 (21讲)
结束语 (1讲)
手把手带你写一门编程语言
15
15
1.0x
00:00/00:00
登录|注册

24|增强编译器前端功能第3步:全面的集合运算

你好,我是宫文学。
在上一节课,我们扩展了我们语言的类型体系,还测试了几个简单的例子。从中,我们已经能体会出一些 TypeScript 类型体系的特点了。
不过,TypeScript 的类型体系其实比我们前面测试的还要强大得多,能够在多种场景下进行复杂的类型处理。
今天这节课,我们会通过多个实际的例子,来探索 TypeScript 的类型处理能力。并且,在这个过程中,你还会进一步印证我们上一节课的一个知识点,就是类型计算实际上就是集合运算。在我们今天的这些例子中,你会见到多种集合运算,包括子集判断、重叠判断,以及交集、并集和补集的计算。
首先,让我们看几个例子,来理解一下类型计算的使用场景。

类型计算的场景

我们先看第一个例子:
function foo1(age : number|null){
let age1 : string|number;
age1 = age; //编译器在这里会检查出错误。
console.log(age1);
}
在这个例子中,我们用到了 age 和 age1 两个变量,它们都采用了联合类型。一个是 number|null,一个是 string|number。
如果你用–strict 选项来编译这个程序,那么 tsc 会报错:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

TypeScript编译器前端的类型处理能力在增强编译器前端功能方面迈出了重要的一步。本文通过多个实际例子探索了类型计算的使用场景,包括等值比较和大小比较的规则,不同运算符的类型检查规则,子类型和重叠的判断,以及集合运算如交集、并集和补集的计算。文章还深入探讨了数据流分析技术如何动态地改变变量的值域,以及如何综合运用多种语义分析技术来获得更强大的效果。通过这些内容,读者可以快速了解TypeScript编译器前端的类型处理能力,以及类型计算的重要性和应用场景。本文全面地运用了集合计算,展示了TypeScript具备强大的类型处理能力的原因。文章还提出了思考题,鼓励读者将本文介绍的类型计算方式与其他语言进行对比,以及分享对类型计算的发现。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • ifelse
    学习打卡
    2022-09-23归属地:浙江
  • blackonion
    rust也可以,例如let mut maybe_some = None;maybe_some = Some(666) 编译器可以算出maybe_some的类型是Option<i32>。
    2021-10-12
  • 奋斗的蜗牛
    之前看typescript编译器的类型检验代码,看得很晕,里面的类型推导是真复杂,谢谢老师讲到这块
    2021-10-08
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部