Open theydy opened 3 years ago
https://www.typescriptlang.org/play?ts=4.1.0-pr-40336-88#code/Q
type Partial<T> = { [P in keyof T]?: T[P] | undefined; }
type Required<T> = { [P in keyof T]-?: T[P]; }
type Readonly<T> = { readonly [P in keyof T]: T[P]; }
type Pick<T, K extends keyof T> = { [P in K]: T[P]; }
type Omit<T, K extends string | number | symbol> = { [P in Exclude<keyof T, K>]: T[P]; }
type Record<K extends string | number | symbol, T> = { [P in K]: T; }
type Exclude<T, U> = T extends U ? never : T // 'b' | 'c' type A = Exclude<'a' | 'b' | 'c' | 'd' , 'b' | 'c' | 'e' >
type Extract<T, U> = T extends U ? T : never
type NonNullable<T> = T extends null | undefined ? never : T
type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never
type ConstructorParameters<T extends new (...args: any) => any> = T extends new (...args: infer P) => any ? P : never
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any
type InstanceType<T extends new (...args: any) => any> = T extends new (...args: any) => infer R ? R : any
在线测试环境
https://www.typescriptlang.org/play?ts=4.1.0-pr-40336-88#code/Q
内置类型
Partial : 将 T 所有字段变为可选
Required : 将 T 所有字段变为必选
Readonly : 将 T 所有字段变为 readonly, 不可修改
Pick<T, K> : 从 T 中过滤出属性 K
Omit<T, K> : 从 T 中移除属性 K
Record<K, T> : 标记对象 key [K] value [T] 类型
Exclude<T, U> : 取 T, U 两者的不相交的属性
Extract<T, U> : 取 T, U 两者的交集属性
NonNullable : 排除 T 的 null | undefined 属性
Parameters : 获取 T 函数的所有参数类型
ConstructorParameters : 获取 T 类的构造函数的所有参数类型
ReturnType : 获取 T 函数返回值的类型
InstanceType : 获取 T 类的实例类型