前瞻
TypeScript 中有许多内置工具,它们每个都可以帮助我们进行类型体操的练习,实际上,工具本身的实现也是一种类型体操。
常见的内置工具
Partial
Partial< Type >
用于构造一个 Type,其所有属性都设置为可选类型
Required
Required< Type >
用于构造一个 Type,其所有属性都设置为必填类型,与 Partial< T >相反
Readonly
Readonly< Type >
用于构造一个 Type,其所有属性都设置为只读类型,意味着这个类型的所有属性全都不可以重新赋值
Record
Record<Keys, Type>
用于构造一个对象类型,它所有的 key 都是 Keys 类型,所有的 value 都是 Type 类型
注意:keyof any => string | number | symbol
Keys 一般都为联合类型
Pick
Pick<Type, Keys>
用于构造一个类型,它是从 Type 类型中挑了一些属性 Keys 组成的
Omit
Omit<Type, Keys>
用于构造一个类型,它是从 Type 类型中过滤了一些属性 Keys
Exclude
Exclude<UnionType, ExcludeMembers>
用于构造一个类型,它是从 UnionType 联合类型里面排除了 ExcludeMembers 的类型
Exclude 的实现涉及到了分发条件类型(传入的类型是个联合类型)
Extract<Type, Union>
用于构造一个类型,它是从 Type 类型中提取了 Union 的类型
与 Exclude 相反
Extract 的实现依然涉及到了分发条件类型
NonNullable
NonNullable< Type >
用于构造一个类型,这个类型从 Type 中排除了 null、undefined
ReturnType
ReturnType< Type >
用于构造一个获取函数的返回值的类型是 Type
InstanceType
InstanceType< Type >
用于构造一个由所有 Type 的构造函数的实例类型组成的类型
typeof class => 构造函数具体的类型
InstanceType => 构造函数创建出来的实例对应的类型
总结
TypeScript 中常见的内置工具的实现其实并不难,有些特别的知识点记住就行:
- keyof any => string | number | symbol
- typeof class => 构造函数具体的类型
- InstanceType => 构造函数创建出来的实例对应的类型