TS08 TypeScript中的泛型工具
TypeScript中内置的泛型工具。
TS提供了很多泛型工具类型,可以帮助我们实现很多复杂的类型。之前对这块没有了解,很多复杂的类型都是自己来实现,其实借助这些工具可以很方便的实现
使用is
进行类型收窄
1 | function isUser(person: Person): person is User { |
使用&
进行属性的合并
使用&
操作符可以实现属性合并
1 | type User = { |
Partial<Type>
使用Partial<Type>
将所有类型属性变成可选
1 | interface Todo { |
Partial
的实现:
1 | type Partial<T> = { [P in keyof T]?: T[P] }; |
Required<Type>
与Partial
相反,将可选属性变为必选
1 | interface Props { |
Readonly<Type>
使用Readonly<Type>
将类型设置为只读
1 | interface Todo { |
Record<keys, Type>
使用Record
生成的类型,包含keys
对应的属性键名,键值为Type
,常用来实现一种类型对另外一种类型的映射关系:
1 | interface PageInfo { |
Pick<Type, Keys>
使用Pick
来在Type
中拾取keys
对应的属性
1 | interface Todo { |
Omit<Type, keys>
从Type
中生成所有属性,并且移除key
对应的属性
1 | interface Todo { |
Exclude<Type, ExcludedUnion>
在Type
中移除ExcludedUnion
中的所有类型(差集)
1 | type T0 = Exclude<"a" | "b" | "c", "a">; |
Extract<Type, Union>
生成Type
与Union
的交集
1 | type T0 = Extract<"a" | "b" | "c", "a" | "f">; |
NonNullable<Type>
生成不为null
和undefined
的类型
1 | type T0 = NonNullable<string | number | undefined>; |
Parameters<Type>
生成对应的函数类型的Type的参数元组类型
1 | declare function f1(arg: { a: number; b: string }): void; |
ReturnType<Type>
生成函数返回值对应的类型
1 | declare function f1(): { a: number; b: string }; |
ThisParameterType<Type>
对于一个函数的this
的类型,可以通过在参数中对进行声明:
1 | function toHex(this: Number) { |
这时可以使用ThisParameterType<Type>
返回this
类型,如果函数没有声明this
类型,那么会返回unknown
1 | function numberToString(n: ThisParameterType<typeof toHex>) { |