深入浅出TypeScript | 青训营

52 阅读3分钟

为什么要学TypeScript?

TypeScript VS Javascript

image.png

TypeScript带来了什么

  不仅仅是一门语言,更是生产力工具。
  1、类型安全
  2、下一代JS特性
  3、完善的工具链

TypeScript推荐

image.png

TS基础

基础类型

1、boolean、number、string

number中包含整数、浮点数、复数,既保持了JS原有的灵活性,又能在此基础上进行一定的扩展。

2、枚举enum

属于TS中特有的类型,通过枚举类型对枚举值做一些类型定义。如图,对枚举值做了一些数值的映射,也进行了反映射(即成员名↔️成员值),包含常量、异构的枚举。      

image.png 3、any、unknown、void

为了提高效率,any定义较多,而unknownany的一个暂命名的类型。

4、never

表示为那些永远值不存在的类型,防御性编程时使用。

image.png

5、数组类型[]

数组相关类型可以根据基础类型或对象类型增加一些基础标识,进行数组定义。

6、元组类型tuple

元组是数组的一个特殊形式,需要显式标注数组中每一个元素的类型。

函数类型

image.png

interface

image.png

image.png

TypeScript进阶

高阶类型

1、联合类型|

如果在定义上有多个基础类型,需要用联合类型取值。

image.png

2、交叉类型&

如果需要在此对象类型上做一些扩展,需要用到交叉类型。

image.png

3、类型断言

TS执行时会检查当前变量的定义情况,在执行此操作前使用断言可以向编译器传达“这个变量有指定类型”,省去相关类型推断的过程。

image.png

4、类型别名(type VS interface)

定义:给类型起个别名
相同点:
     1、都可以定义对象或函数
     2、都允许继承
差异点:
     1interface是TS用来定义对象,type是用来定义别名方便使用。
     2type可以定义基本类型,interface不行。
     3interface可以合并重复声明,type不行。

image.pngimage.png

泛型

什么时候需要泛型?

官方定义:

软件工程中,我们不仅要创建一致的定义良好的 API,同时也要考虑可重用性。
组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。
在像C#和Java 这样的语言中,可以使用泛型来建可重用的组个组件可以支持多种类型的数据。 
这样用户就可以以自己的数据类型来使用组件。

应用场景: image.png 通过泛型解决输入输出可关联的问题。

基本使用

image.png

工具类型

基本操作符

  tyepof:获取类型

image.png

  keyof:获取所有键  

image.png

  in:遍历枚举类型

image.png

  T[K]:索引访问

image.png

 extends:泛型约束

image.png

常用工具类型

image.png

TypeScript实战

声明文件

declare:三方库需要类型声明文件
        类型环境是存放在类型声明里重要的上下文。
.d.ts:声明文件定义
      通过解析.d.ts文件,获得三方库中对对象类型的类型定义。
@types:三方库TS类型包
       找到三方库中的类型定义,补充使用的具体情况。
tsconfig.json:定义TS的配置
              做一些TS编译及配置的相关定义。

泛型约束后端接口类型

image.png

总结

TS是JS的超集,增强了类型安全,提高生产力。