TypeScript
这些年越来越火,逐渐在成为前端工程师的主流语言,为什么会出现这样的情况呢?本小节主要分析TypeScript
爆火背后的原因。
第一个问题,类型是什么?
类型具体点来说就是指 number、boolean、string 等基础类型和 Object、Function 等复合类型:
- 不同类型变量占据的内存大小不同:boolean 类型的变量会分配 4 个字节的内存,而 number 类型的变量则会分配 8 个字节的内存,给变量声明了不同的类型就代表了会占据不同的内存空间
- 不同类型变量可做的操作不同:number 类型可以做加减乘除等运算,boolean 就不可以,复合类型中不同类型的对象可用的方法不同,比如 Date 和 RegExp,变量的类型不同代表可以对该变量做的操作就不同。
因此,类型必须要与所做的操作相匹配,这就是为什么要做类型检查的原因。类型检查是为了保证类型安全:
- 类型安全:能保证某种类型只做该类型允许的操作,这就叫做类型安全。
- 动态类型检查(js):类型检查在运行时做。 优点:在源码中不保留类型信息,写代码很灵活。 缺点:埋下了类型不安全的隐患,比如对 string 做了乘除,对 Date 对象调用了 exec 方法,这些都是运行时才能检查出来的错误
- 静态类型检查(ts):类型检查在运行之前的编译期做。 优点:消除类型不安全的隐患,在编译期间做类型检查。 缺点:在源码中保留类型信息,写代码时需要考虑的问题更多一些。
针对上述两种类型检查方式可知:
动态类型只适合简单的场景,对于大项目却不太合适,因为代码中可能藏着的隐患太多了,万一线上报一个类型不匹配的错误,那可能就是大问题。
而静态类型虽然会增加写代码的成本,但是却能更好的保证代码的健壮性,减少 Bug 率。
因此,大型项目注定会使用静态类型语言开发。
TypeScript 给 JavaScript 添加了一套静态类型系统,从动态类型语言变成了静态类型语言,可以在编译期间做类型检查,提前发现一些类型安全问题。而且,因为代码中添加了静态类型,也就可以配合编辑器来实现更好的提示、重构等,这是额外的好处。