这是我参与 「第五届青训营」 伴学笔记创作活动的第 3 天
1. Typescript的特征
1)静态类型,变量声明之后不能再进行类型的转换。可读性增强(Typescript可以基于语法解析自动生成文档同时它的类型就说明了含义),可维护性增强(在编译阶段暴露大部分错误,函数接收变量的类型可以进行定义)
2)JS超集,包含和兼容所有Js特性,支持共存和渐进式引入
2. 基本语法
1)基础数据类型的定义
const q: string = 'string'
2)对象类型的定义
除了以上类型之外,Typescript还有一种特殊的数据类型any,表示任意类型
3)函数类型
函数参数类型的声明方法有两种,第一种是像声明基础数据类型一样直接声明
第二种是定义一个函数接口再赋值给变量
4) 函数重载
会发现以上代码报错,这是因为Typescript通过定义的接口声明函数往往包含有两个步骤,第一步创建一个匿名函数,并把这个函数赋值给了getDate2这个变量,第二步给这个变量约定了类型IGetDate,这个时候就会发生一次类型匹配,因为Typescript会进行类型推断,把匿名函数的类型和IGetDate这个类型进行比较。为了让它通过,需要让IGetDate的范围表达大于匿名函数。
将IGetGate接口前两个函数的返回值类型修改为any即可
5) 数组类型
通常使用第一种方法或者第二种方法定义数组
6) Typescript补充类型
enum枚举类型就是进行映射
7) Typescript泛型
如上图所示,getRepeatArr函数的功能是返回一个包含100个target值的数组。如果使用any,我传入一个number类型的值,我希望得到的是包含100个target值的number数组,但是其实返回的是包含100个target值的any数组,这显然达不到预期。使用泛型,在不知道值类型的情况下,它会在获取到值后再进行值类型的确认
泛型约束(将泛型支持的类型限制在一定的范围内):
<T extends string> /* 限制泛型必须是字符串 */
泛型参数默认类型:
<T = number>
3. 高级类型
1)联合/交叉类型
联合类型:|A | |B;联合类型表示一个值可以是几种类型之一
交叉类型:|A & |B;多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性
2)类型保护与类型守卫
类型保护:当你需要访问联合类型的时,只能访问联合类型中的交集部分
3)类型子集
Record是一个高级类型,Record<string, any>表示对象中的key是string类型,值是any类型
Partial<T>拥有一个类型,传入任意类型后,得到它的子集,Partial是内置类型,它的定义和IPartial一样
4)函数返回值类型
4. 工程应用
1)Web
Webpack
①配置webpack loader相关配置,loader将webpack不能识别的文件转换为可以识别的文件
②配置tsconfig.js文件
③运行webpack启动/打包
④loader处理ts文件时,会进行编译与类型检查
2)Node
使用TSC编译