Typescript入门 | 青训营笔记

93 阅读3分钟

这是我参与 「第五届青训营」 伴学笔记创作活动的第 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的范围表达大于匿名函数。

carbon.png

将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编译