一、What and Why
什么是Ts,ts是js的类型超集,说白了,就是指定变量是什么类型的一种js
为什么要学习ts? 因为企业需求(狗头),其实是因为js语言的不严谨,特意加上了一层束缚,旨在帮助开发人员编写更少bug的代码
二、什么是tsc
因为浏览器并不认识.ts和.tsx的文件,所以需要有编译器把ts转成js,做这件事的人就是tsc(typescript compiler)
2.1启动tsc
tsc启动后可以实时监控你的代码情况和变化,并进行编译
如果你下载了tsc,那么对应会有个tsconfig.json,这是对可以根据需求对tsc进行配置。 最常见的配置有2处。
2.2指定dest文件夹
你可以在tsconfig里搜out,找到outDir,如下图所示:
意思是所有.ts文件编译成js后,都会进入dest文件夹里
2.3es6/common.js
比如说你想要es6/common.js,你也可以自行配置,如下图所示:
但如果你是用的是打包器,那你就不用操心了,打包器全都替你处理好了。
三、基本类型
基本类型还包括(void,any,unknown)如下图所示声明即可
四、数组和元组
4.1数组(数据类型相同)
数据类型相同的可以声明为数组,比如说一个数组里全是number类型的集合。或者全是string类型的集合。如下图:
意思是ids是一个numebr类型的数组,arr是一个可以是任意类型的数组
4.2元组(类型不同)
对于数组里数据类型不同的,则采用元组来定义这个元组类型。
五、联合和枚举
5.1联合(union)
对一个变量的类型可能是string/number时,可以用联合,如:
5.2枚举(enum)
感觉用的少,就不写了
六、对象(最常用)
声明对象跟元组有点像。数组里不同的数据类型,咱也是一一指明类型。对象也是,只不过咱们用type定义一个类型,如:
七、类型推断
比如说我们声明cid可以是any类型,但customerId我们希望它是number类型,我们可以用尖括号<>或者as来指明,如:
八、函数(重点)
声明函数时,你必须指定传进来的参数是什么类型,当然,如果你想指定函数的返回值是什么类型也行,像fn():number这种的意思就是fn函数执行的返回值是number类型。举个例子,如下:
上图中log函数没有返回值/返回值为undefined,我们就用void表示此函数类型
九、inerface接口
一般来说,我们声明对象类型就用interface,如我们第六章讲到的用type定义对象类型,区别在于interface不需要等号=,比如说:
age?的意思是age属性是可选的,意思是这个对象可以有age,也可以没有。和type的区别在于,type可以和联合一起使用,而interface不行,比如说:
十、泛型(Generics)
泛型跟any是一个意思,但区别在于,泛型可以指定某个特定类型,让我来解释一下,比如说:
意思是getArray函数可以是任意形式的函数,但如果你用getArray意思相当于是把赋值给T,此时的getArray代表着这个函数参数是一个number数组,返回值也必须是number数组。所以我们想添加一个字符串型的hello肯定是会报错的
什么是静态检查? => 其实就是在代码运行之前检查代码有没有问题
js就是跑完代码之后报错,而ts则是代码跑之前就可以提示你哪里有问题