为什么要学TypeScript?
TypeScript VS Javascript
TypeScript带来了什么
不仅仅是一门语言,更是生产力工具。
1、类型安全
2、下一代JS特性
3、完善的工具链
TypeScript推荐
TS基础
基础类型
1、boolean、number、string
number中包含整数、浮点数、复数,既保持了JS原有的灵活性,又能在此基础上进行一定的扩展。
2、枚举enum
属于TS中特有的类型,通过枚举类型对枚举值做一些类型定义。如图,对枚举值做了一些数值的映射,也进行了反映射(即成员名↔️成员值),包含常量、异构的枚举。
3、any、unknown、void
为了提高效率,any定义较多,而unknown是any的一个暂命名的类型。
4、never
表示为那些永远值不存在的类型,防御性编程时使用。
5、数组类型[]
数组相关类型可以根据基础类型或对象类型增加一些基础标识,进行数组定义。
6、元组类型tuple
元组是数组的一个特殊形式,需要显式标注数组中每一个元素的类型。
函数类型
interface
类
TypeScript进阶
高阶类型
1、联合类型|
如果在定义上有多个基础类型,需要用联合类型取值。
2、交叉类型&
如果需要在此对象类型上做一些扩展,需要用到交叉类型。
3、类型断言
TS执行时会检查当前变量的定义情况,在执行此操作前使用断言可以向编译器传达“这个变量有指定类型”,省去相关类型推断的过程。
4、类型别名(type VS interface)
定义:给类型起个别名
相同点:
1、都可以定义对象或函数
2、都允许继承
差异点:
1、interface是TS用来定义对象,type是用来定义别名方便使用。
2、type可以定义基本类型,interface不行。
3、interface可以合并重复声明,type不行。
泛型
什么时候需要泛型?
官方定义:
软件工程中,我们不仅要创建一致的定义良好的 API,同时也要考虑可重用性。
组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。
在像C#和Java 这样的语言中,可以使用泛型来建可重用的组个组件可以支持多种类型的数据。
这样用户就可以以自己的数据类型来使用组件。
应用场景:
通过泛型解决输入输出可关联的问题。
基本使用
工具类型
基本操作符
tyepof:获取类型
keyof:获取所有键
in:遍历枚举类型
T[K]:索引访问
extends:泛型约束
常用工具类型
TypeScript实战
声明文件
declare:三方库需要类型声明文件
类型环境是存放在类型声明里重要的上下文。
.d.ts:声明文件定义
通过解析.d.ts文件,获得三方库中对对象类型的类型定义。
@types:三方库TS类型包
找到三方库中的类型定义,补充使用的具体情况。
tsconfig.json:定义TS的配置
做一些TS编译及配置的相关定义。
泛型约束后端接口类型
总结
TS是JS的超集,增强了类型安全,提高生产力。