LinkeZ

TypeScript(一)

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个时间进行检查,分别为:

  1. 在代码编写时,现在很多IDE都集成了这个功能,在写代码的时候出现语法、类型等错误时,它会直接标注出来;
  2. 在代码编译时,在写完代码后,运行之前,语言的编译器会把所有的代码进行检查,如果有不正确的地方,会直接抛出错误提示;
  3. 在程序运行时,在写完代码后,运行之前,编译器不会进行编译,但是在运行时,运行到某一行代码时,编译器发现错误,在这时才会进行抛出错误;
  4. 还有一个比较特殊的,就是不会报错,这个先暂时不讨论。

为什么要区分静态类型和动态类型呢?

个人认为一是面对不同的软件项目,二是面对不同的开发人群。

  1. 面对不同的项目:在进行项目的策划时,按照项目的规模与参与人数进行选择,当项目较大并且参与人员比较多时,这时候对类型的约束就非常有必要。当许多人合作开发一个项目,每个人分别负责编写不同的模块,每个模块之间需要互相传值,如果由于传入值的类型与模块内能够运算的值类型不匹配,可能会产生许多未知的错误,发现错误后再进行排查修改,只会徒添资源的浪费。
  2. 面对不同的开发人群:由于每一位开发者学习编程语言的目的不一样,计算机基础不同。如果只是为了更快的学习一门语言进行一些简单的软件制作,动态类型的语言学习成本普遍要低于静态类型的语言,动态类型的语言没有严格的类型限制,在学习与开发时的效率要高一些。在我刚刚开始学习C、C#时,每个知识点都要讲20分钟以上,普遍的都在40分钟左右,真的是学习成本有点高。

它们各自的优缺点

  • 动态类型:
    • 优点:学习成本低,开发速度快,代码的重用性更好。
    • 缺点:性能比静态语言低(还有其它缺点,暂时想不起来了)。
  • 静态类型:
    • 优点:比较适合大型以及多人合作开发的项目,性能比动态语言高。
    • 缺点:学习与开发成本较高,代码的重用性比较差,虽然说现在静态语言很多都有泛型,个人感觉还是不如动态语言来的方便。

总结

这遍博客有些跑题了,大多的篇幅是在说动态类型静态类型但我觉得这也是学习TypeScript之前需要了解的知识点,有必要搞清楚自己学习编程语言之前定下的目标是什么,从而进行选择性的学习需要的语言。下一篇将正式进入TypeScript语言的知识分享。

Thank you for read

0

Comments