ts 中其实已经内置了很多常用类型,此处记录一下,不是太完整 🐶
假设我们已经声明了一个 interface
ts
interface Person {
name: string
age?: number
}
将所有参数变成可选
ts
type Partial<T> = {
[P in keyof T]?: T[P]
}
将所有参数变成必选
ts
type Required<T> = {
[P in keyof T]-?: T[P]
}
将所有参数变成只读
ts
type Readonly<T> = {
readonly [P in keyof T]: T[P]
}
挑出一部分属性及声明重新生成一个新类型
ts
type Pick<T, K extends keyof T> = {
[P in K]: T[P]
}
构造一个具有一组属性为 K,类型为 T 的类型
ts
type Record<K extends keyof any, T> = {
[P in K]: T
}
从 T 中排除那些可赋值给 U 的类型
ts
type Exclude<T, U> = T extends U ? never : T
从 T 中提取那些可赋值给 U 的类型
ts
type Extract<T, U> = T extends U ? T : never
用来忽略对象某些属性
ts
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>
从 T 中排除 null 和 undefined
ts
type NonNullable<T> = T extends null | undefined ? never : T
获取函数的参数类型组成的元组类型
ts
type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never
function foo(a: string, b: number) {}
获取函数的返回类型
ts
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any
function foo(x: number): number[] {
return [x]
}