引言
- 很多内置的类型,都是基于条件类型的
我们先来看一个例子
- 用泛型约束来实现条件判断
- 这里必须用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
- 细选