TypeScript学习

133 阅读2分钟

一、What and Why

什么是Ts,ts是js的类型超集,说白了,就是指定变量是什么类型的一种js

为什么要学习ts? 因为企业需求(狗头),其实是因为js语言的不严谨,特意加上了一层束缚,旨在帮助开发人员编写更少bug的代码

二、什么是tsc

因为浏览器并不认识.ts和.tsx的文件,所以需要有编译器把ts转成js,做这件事的人就是tsc(typescript compiler)

2.1启动tsc

tsc启动后可以实时监控你的代码情况和变化,并进行编译

image.png

如果你下载了tsc,那么对应会有个tsconfig.json,这是对可以根据需求对tsc进行配置。 最常见的配置有2处。

2.2指定dest文件夹

你可以在tsconfig里搜out,找到outDir,如下图所示: image.png

意思是所有.ts文件编译成js后,都会进入dest文件夹里

2.3es6/common.js

比如说你想要es6/common.js,你也可以自行配置,如下图所示: image.png

但如果你是用的是打包器,那你就不用操心了,打包器全都替你处理好了。

三、基本类型

基本类型还包括(void,any,unknown)如下图所示声明即可

image.png

四、数组和元组

4.1数组(数据类型相同)

数据类型相同的可以声明为数组,比如说一个数组里全是number类型的集合。或者全是string类型的集合。如下图:

image.png

意思是ids是一个numebr类型的数组,arr是一个可以是任意类型的数组

4.2元组(类型不同)

对于数组里数据类型不同的,则采用元组来定义这个元组类型。

image.png

五、联合和枚举

5.1联合(union)

对一个变量的类型可能是string/number时,可以用联合,如:

image.png

5.2枚举(enum)

感觉用的少,就不写了

六、对象(最常用)

声明对象跟元组有点像。数组里不同的数据类型,咱也是一一指明类型。对象也是,只不过咱们用type定义一个类型,如:

image.png

七、类型推断

比如说我们声明cid可以是any类型,但customerId我们希望它是number类型,我们可以用尖括号<>或者as来指明,如:

image.png

八、函数(重点)

声明函数时,你必须指定传进来的参数是什么类型,当然,如果你想指定函数的返回值是什么类型也行,像fn():number这种的意思就是fn函数执行的返回值是number类型。举个例子,如下:

image.png

上图中log函数没有返回值/返回值为undefined,我们就用void表示此函数类型

九、inerface接口

一般来说,我们声明对象类型就用interface,如我们第六章讲到的用type定义对象类型,区别在于interface不需要等号=,比如说:

image.png

age?的意思是age属性是可选的,意思是这个对象可以有age,也可以没有。和type的区别在于,type可以和联合一起使用,而interface不行,比如说:

image.png

十、泛型(Generics)

泛型跟any是一个意思,但区别在于,泛型可以指定某个特定类型,让我来解释一下,比如说: image.png 意思是getArray函数可以是任意形式的函数,但如果你用getArray意思相当于是把赋值给T,此时的getArray代表着这个函数参数是一个number数组,返回值也必须是number数组。所以我们想添加一个字符串型的hello肯定是会报错的

什么是静态检查? => 其实就是在代码运行之前检查代码有没有问题

js就是跑完代码之后报错,而ts则是代码跑之前就可以提示你哪里有问题