为什么要学习typescript
面试中增加竞争力
TS
现在越来越流行,如果在简历中写上熟悉TS
,或则在以往的项目中用到了TS
,那么在面试中能聊聊这方面的知识,那么我相信,这在一定的程度上增强我们的竞争力
获得更好的开发体验
TS
确实能增强我们的开发体验,因为他能规避我们很多低级问题,比如使用了不存在变量,结果只能等到运行时候才发现
注意,这里说的是开发体验,而不是开发速度,因为TS
会额外增加我们的工作量,这是无法避免的
但是它能减少我们棑错的时间,增强代码的可读性,增强代码的可维护性
想想你心接一个老项目,如果没有TS
约束,90%的可能性就是个屎山。而如果这个老项目用到TS
,那么情况肯定会好很多
解决原生JS中无法解决的问题
关于这一点,我们在下面一节着重来介绍
javascript中存在的问题
存在的问题
使用不存在的变量、函数不会报错
我们在打代码的过程中,很容易遇到,前面定义了一个 name
的变量,而在接下来的使用过程中,直接将name
写成了nema
,这样的情况很多
特别是在我们用一些专业英语名词来命名一个变量或者函数的时候,因为那个单词跟业务有关,不是常用单词,写错了很正常
举个例子,合同这个单词contract
,知识库knowledge
而JS语言在你敲代码的时候是不会报错的,而是在代码运行起来才报错,是不是体验非常的不好
把不确定的类型当做确定的类型来处理
比如有一个name
的字符串,你以为是字符串,那么你按照字符串的方法来处理它,比如使用了字符串的方法substring
,结果运行起来发现,在某个地方给他赋值成了 布尔类型,结果报错了
另外一个比较典型的案例就是经常报错"TypeError: Cannot read property 'find' of undefined"
这个就是典型的类型问题导致的
我相信只要开发过前端的小伙伴一定遇到这样的问题,因为一个变量可能是你定义的,也有可能是外部得到的(比如网络请求获取的)
原因
JS语言设计的背景,本身就有缺陷
JS语言设计之初就是赶工赶出来的,大概也就是2-3天时间。
它本来就不是为了写大型的复杂的项目所涉及的,所以有很多的缺陷
它的设计之初,只是个脚本语言,是为了实现网页里面的一些效果,比如跑马灯、文字滚动等
JS是弱类型语言,变量的类型是可以随时可以切换的
JS中是弱类型语言,它的变量类型是随时可以变的,不需要强制转换
作为对比,像JAVA
等强类型语言中的变量的类型是不能随意更改的
JS是解释型语言,错误都在运行之后才会发现
JS语言是解释型语言,是一边运行一边解析,所以很多错误只有等代码运行起来才会报错
而作为对比,强类型语言是有一个编译过程,在这个编译的过程中,就会对代码进行各种检查,发现错误
typescript简述
TS是什么,TS的定义
TS是JS的一个超集,是一个可选的、静态的类型系统
什么是超集
超集的意思就是 TS完全包含JS,就像整数包含正整数的概念一样。 所以JS的代码改成ts文件,一样运行
什么是类型系统
类型系统就是对标识符的进行检查,标识符主要就是指的 变量、函数、参数、函数返回值等
而TS就是在JS的基础上增加这么一套对类型的检查的规范而已,帮助我们高效及时的排错
为什么说是可选的
可选的意思就是你可以用,也可以不用,如果你觉得某些地方定义结构太麻烦了,那么就不用就行了,一样可以用,不会写的地方直接用any,很简单
所以说用TS不要有任何压力,因为即使我是TS文件,我也可以不用
怎么理解静态
类型检查是在编译的时候,不是在运行的时候,我们一般通过tsc
来将ts代码转换成js代码,也算是编译过程
如果有类型错误,那么就是在这个转换的过程中会抛出错误
其他信息
TS的创建背景,发明人
TS是2012年发明出来的,发明人叫安德斯·海尔斯伯格(Anders Hejlsberg)
其实微软也会接很多外包项目,比如大型银行的项目等,2012年的时候ES6
还没有出来,所以微软内部在写大型的前端应用的时候,发现很多的时间都是用在排错上面,而且很多都是低级错误,也就是类型方面的错误
所以那个时候,微软让安德斯·海尔斯伯格 去负责这个TS这个项目,解决这些问题,并且最后这个项目最后开源了
拥抱标准,积极改变
后面ES6
出来,并且TS要对新出来的语法进行兼容。这一点不容易的,因为微软一直都是以行业的老大哥的姿态搞搞在上,不愿意向别人妥协,但是 TS
这个项目做了妥协,并且很积极,另外一个比较好的项目就是vscode
,也是备受欢迎
官方网站
www.typescriptlang.org/ (英文) www.tslang.cn/ (中文非官方)
多用能增强面向对象的思维
其实在我们用过一段时间TS之后,无形当中会帮助我们更加的理解面向对象的思想
因为JS虽然有类这个概念,但是由于语言的缺陷,也没有类型检查,很多的面相对象的场景实现起来有很多的问题
而TS的出现,class类就非常的强了,就可以编写出来很强壮的面向对象的代码, 其实就跟强类型语言差不多