实现TS内置类型
引言
我们先来看一个例子

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

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

内置的条件类型
Exclude

Exclude实现

Extract

Extract实现

NonNullable

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

Partial

Partial实现

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

Readonly实现

Required

Required实现

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


DeepPartial

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

Omit实现

Pick

Pick实现
