2019 年春天,我在工作之余学习了 Python 以及它的重量级框架 Django;去年春天,我学习了 HTML5、CSS、JavaScript 以及 React 全家桶;在之前的两个月里,我一直在学习 TypeScript 接下来是 Vue3。俗话说得好:一天之计在于晨,一年之计在于春,一生之计在于…… 呃,在于不断的修正前进的方向。最近几年,每年春天都是我最想学点什么的时候,每一年自己都要给自己制定一个今年的目标,我的目标就是多学点知识,在工作之余接点小活挣点外快养家糊口嘛(但愿能实现),下面进入正题。
如果你之前有学过 Java 或 C#,那么再学习 TypeScript 会轻松许多,因为有许多东西 TypeScript 与 Java 和 C# 是一样的。在我学习 TypeScript 的时候,有许多人都不理解为什么要在 JavaScript 的基础上添加这么多新特性?肯定是因为 JavaScript 并不能满足所有的开发需求。我觉得 TypeScript 更适合多人合作或大型项目的开发,因为它有严格的类型限制,在模块之间传值时,由于类型的限制,基本不会出现未知的错误,从而减少后期排错的时间。
#什么是 TypeScript
TypeScript 是由微软开发的开源编程语言,是在 JavaScript 的基础上,添加了静态类型定义构建成,TypeScript 就是 JavaScript 的超集。这里有两个词比较关建,一个是静态类型,一个是超集。
#超集
什么是超集?一开始我也不太明白超集是什么意思,通过搜索才理解了这个词:例如有 A、B 两个集合,B 集合中的每一个元素都在集合 A 中,并且集合 A 中可能包含集合 B 中没有的元素,则集合 A 是集合 B 的超集,集合 B 是集合 A 的子集。TypeScript 就是在 JavaScript 的基础上添加了静态类型的定义而成的超集。
#静态类型
要理解 静态类型 就要知道编程语言按照类型检查,可以分为两大类: 静态类型 (Static Typing) 和 动态类型 (Dynamic Typing) ,各种类型的代表语言有:
- 静态类型:Java、C/C++、C#、Golang 等
- 动态类型:Python、PHP、JavaScript 等
为什么会有静态类型与动态类型?
在代码运行之前都需要进行错误检查,语法规则、类型检查、运算符等等,不同的语言会在不同的 3 个时间进行检查,分别为:
- 在代码编写时,现在很多 IDE 都集成了这个功能,在写代码的时候出现语法、类型等错误时,它会直接标注出来;
- 在代码编译时,在写完代码后,运行之前,语言的编译器会把所有的代码进行检查,如果有不正确的地方,会直接抛出错误提示;
- 在程序运行时,在写完代码后,运行之前,编译器不会进行编译,但是在运行时,运行到某一行代码时,编译器发现错误,在这时才会进行抛出错误;
- 还有一个比较特殊的,就是不会报错,这个先暂时不讨论。
为什么要区分静态类型和动态类型呢?
个人认为一是面对不同的软件项目,二是面对不同的开发人群。
- 面对不同的项目:在进行项目的策划时,按照项目的规模与参与人数进行选择,当项目较大并且参与人员比较多时,这时候对类型的约束就非常有必要。当许多人合作开发一个项目,每个人分别负责编写不同的模块,每个模块之间需要互相传值,如果由于传入值的类型与模块内能够运算的值类型不匹配,可能会产生许多未知的错误,发现错误后再进行排查修改,只会徒添资源的浪费。
- 面对不同的开发人群:由于每一位开发者学习编程语言的目的不一样,计算机基础不同。如果只是为了更快的学习一门语言进行一些简单的软件制作,动态类型的语言学习成本普遍要低于静态类型的语言,动态类型的语言没有严格的类型限制,在学习与开发时的效率要高一些。在我刚刚开始学习 C、C# 时,每个知识点都要讲 20 分钟以上,普遍的都在 40 分钟左右,真的是学习成本有点高。
它们各自的优缺点
- 动态类型:
- 优点:学习成本低,开发速度快,代码的重用性更好。
- 缺点:性能比静态语言低(还有其它缺点,暂时想不起来了)。
- 静态类型:
- 优点:比较适合大型以及多人合作开发的项目,性能比动态语言高。
- 缺点:学习与开发成本较高,代码的重用性比较差,虽然说现在静态语言很多都有泛型,个人感觉还是不如动态语言来的方便。
#总结
这遍博客有些跑题了,大多的篇幅是在说动态类型与静态类型但我觉得这也是学习 TypeScript 之前需要了解的知识点,有必要搞清楚自己学习编程语言之前定下的目标是什么,从而进行选择性的学习需要的语言。下一篇将正式进入 TypeScript 语言的知识分享。