实现TS内置类型

291 阅读1分钟

引言

  • 很多内置的类型,都是基于条件类型的

我们先来看一个例子

Image.png

  • 用泛型约束来实现条件判断
  • 这里必须用type,不能用interface,因为interface不支持这种条件类型也不能使用联合类型

分发的概念

Image.png

  • 假如我们传一个联合类型
  • 这里的分发指代的是分别拿联合类型的每一个进行判断,最后得出的结果是分发后的联合类型
  • 分发只能出现在联合类型,并且只能出现在裸类型中,在条件判断时,类型不能被其它包裹
  • 最后得到的类型结果就是

Image.png

内置的条件类型

Exclude

Image.png

  • 在一系列类型中抛出掉某个类型可以使用

Exclude实现

Image.png

Extract

Image.png

  • 从一系列类型中抽离出某个类型

Extract实现

Image.png

NonNullable

Image.png

  • 非空类型,去除类型里面undefined和null的类型
  • 在属性类型用的多一些
  • !表示的是值是非空的,NonNullable代表的是类型非空

NonNullable实现

Image.png

Partial

Image.png

  • 把对象属性都变成可选

Partial实现

Image.png

  • 用in循环所有key,把每一项变成可选
  • in循环联合类型或者any

Readonly

Image.png

  • 所有属性仅读

Readonly实现

Image.png

Required

Image.png

  • 去掉问号,必填

Required实现

Image.png

如果是多层,我们用Partial只处理第一层,所以我们需要把里面 IInfo里面也变成可选,不然我只写info,还是提示我里面必填

Image.png

Image.png

DeepPartial

Image.png

  • 把里面全部变成可选
  • 借用extends对值进行判断

Omit

  • 忽略

Image.png

Omit实现

Image.png

Pick

  • 细选

Image.png

Pick实现

Image.png