typescript概述

29 阅读6分钟

为什么要学习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类就非常的强了,就可以编写出来很强壮的面向对象的代码, 其实就跟强类型语言差不多