TypeScript

typescript是解决js中的一些难以处理的问题而生的

js的一些问题

肯定会犯还无法避免的问题:

  1. 使用了不存在的js变量或函数成员(名字写错、大小写等),js不运行不认为是错的。
  2. 类型错误导致的问题,因为不同类型身上有不同的属性和方法。 a. 比如一个变量可能是字符串、也可能是数字,但是你当做字符串用了split方法,开发时自己不知道,开发完了上线才知道是数字就会报错,是很大的问题。
  3. 使用了null或undefined的成员。再调用他们身上的属性和方法,导致错误(前端开发排名前十错误第一名)

js的隐患问题

因为本身的特点导致的隐患问题:

• 弱类型 :某个变量可以随时更换类型。按照java的特点,一开始是什么类型,就应该永远是什么类型。

• 解释型 :看一行执行一行,导致我们的代码必须在浏览器运行完才知道错误在哪并进行修改。错误发生的时间是在运行时。不像java编译型语言,如果编译不成功是不行的。js纠错耗费了我们大部分的时间,前端开发工作者大部分的时间都是在找错误。

js的设计出发点是为了做浏览器中的一些小的效果,因为天生的特性,导致他无法适应大型的复杂项目。

TS常识

微软发布于2012年,anders主要负责者。开源的、开放的,拥抱ES标准的(当ts标准与es标准冲突时,ts会适应es的标准,难为微软了)

es6是2015年出现的。

目前版本:3.4

官网:http://www.typescriptlang.org/

中文网:https://www.tslang.cn/ (翻译有点落后)

Ts 是一门语言

TS的特点(总结一句话):TypeScript 是 JavaScript的超集,是一个可选的、静态的类型系统。

- 超集 -

数学里的一个概念。比如整数包含正整数,说明整数是正整数的超集。

es6是es5的超集,es6包含es5,并在es5的基础上增加了一些新的东西。

ts是js的超集,也就是ts是包含了js语言的所有功能,并在js的基础上增加了自己类型检查的东西。没有增加功能性的东西,只增加了类型系统

所以,JS能做的TS也能做,JS能兼容各种环境,TS也可以;JS生成的各种框架,TS也能无缝融合进去。

- 类型系统 -

对代码中所有的标识符(即变量、函数、参数、返回值)进行类型检查和类型约束

- 可选的 -

类型检查系统可以用、也可以不用。学习曲线非常平滑。

- 静态的 -

静态的类型检查,发生的时间在编译的时候,而不是运行的时候(即在运行之前检查)。ts不参与任何运行时的类型检查

所以在运行之前,需要经过转换,在转换的过程中,才能发现错误。如果运行结束,说明检查通过。

js代码是直接拿过去运行的,出错也是在运行的时候,是动态的。

但是ts代码是不能直接执行的,需要经过编译过程,所以是静态的,他不参与任何运行时的类型检查。所以,运行时的错误就跟ts无关了。

TSC

无论是浏览器环境还是node环境,都无法直接识别ts代码。所以需要一个转换的工具

ts编译器:tsc

把ts转换成es。

TS独有的优势

有了类型检查,增强了面向对象的开发。 js中也有类和对象,js支持面向对象开发。js没有类型检查,很多面向对象的场景实现起来有诸多问题。 有了ts后,增强了类型检查,可以编写出完善的面向对象代码。

面向对象是一种很古老的思想了,有了很多年的沉淀,很多语言的使用,已经形成了在某些场景下面有了成熟的解决方案和模式可以用。