23|增强编译器前端功能第2步:增强类型体系
宫文学
你好,我是宫文学。
你可能也注意到了,我们在第二部分的主要任务,是要让 PlayScript 扩展到支持更多的类型。在这个任务中,对类型的处理能力就是一个很重要的功能。
其实在第一部分,我们已经实现了一定的类型处理功能,包括类型检查、类型自动推断等,但其实还有更多的类型处理能力需要支持。
对于一门语言来说,类型系统是它的核心。语言之间的差别很多时候都体现在类型系统的设计上,程序员们通常也会对类型处理的内部机制很感兴趣。而 TypeScript 比 JavaScript 语言增强的部分,恰恰就是一个强大而又灵活的类型系统,所以我们就更有必要讨论一下与类型有关的话题了。
那么通过今天这节课,我们就来增强一下 PlayScript 的类型处理能力,在这过程中,我们也能学习到更多与类型系统有关的知识点,特别是能对类型计算的数学实质有所认知。
首先,我们来看看 TypeScript 的类型系统有什么特点。
TypeScript 的类型系统
从 TypeScript 的名字上,你就可以看出来,这门语言在类型系统的设计上,一定是下了功夫的。也确实是这样,TypeScript 在设计之初,就想弥补 JavaScript 弱类型、动态类型所带来的缺点。特别是,当程序规模变大的时候,弱类型、动态类型很容易不经意地引入一些错误,而且还比较难以发现。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
TypeScript的类型系统经过精心设计,旨在弥补JavaScript弱类型、动态类型所带来的缺点。该类型系统功能强大,表达能力很强,有利于提高程序的正确性,同时又没有削弱程序员自由表达各种设计思想的能力。文章介绍了TypeScript类型系统的特点,包括继承JavaScript的预定义类型、禁止变量类型的动态修改、支持联合类型和将值作为类型等。此外,还提到了TypeScript的类型系统还有更多丰富的特性,如数组类型、交集类型、通过class和interface实现自定义的类型、泛型等。文章强调了循序渐进的原则,先从比较简单的特性入手,然后逐步深化。接下来,文章将聚焦在联合类型和值类型的支持能力上,以体会TypeScript类型系统的强大。文章还介绍了语法解析器的升级,以支持新的语法规则,并讨论了AST和CST的区别。此外,还介绍了与类型相关的AST节点的设计和类型对象结构的表示,以及类型解析程序TypeResolver的功能。最后,文章提到了升级类型检查算法,以支持新的联合类型和值类型。整体而言,本文深入探讨了TypeScript类型系统的设计与实现,为读者提供了全面的技术视角。文章内容涉及了TypeScript类型体系的特征、语法规则的升级、类型检查功能的升级,以及与其他语言的比较和思考题等内容,为读者提供了全面的技术视角。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》,新⼈⾸单¥59
《手把手带你写一门编程语言》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(4)
- 最新
- 精选
- ifelse学习打卡2022-09-23归属地:浙江
- qinsiTypeScript的union type就是Haskell ADT里的sum type,不过是untagged,所以在判断类型上有诸多不便。TypeScript也可以定义product type: ```typescript type pair = [string, number] ``` 因为TypeScript支持值类型,又因为TypeScript的类型系统是图灵完整的,所以可以像C++的模版元编程一样,做出一些“滥用”的行为,比如你甚至可以让编译器帮你解析html: https://github.com/g-plane/type-gymnastics/blob/master/src/spec-compliant-html-parser/index.ts2021-10-02
- 奋斗的蜗牛赞,类型系统的实现一直看不太明白,是个难点2021-09-29
- quanee老师, 我们写的语言最后能自举吗?2021-09-291
收起评论