Partial
作用:生成一个新类型,该类型与 T 拥有相同的属性,但是所有属性皆为可选项
源码
type Partial<T> = {[P in kefof T]?: T[P]}
eg
interface Foo {name: stringage: number}type Bar = Partial<Foo>// 相当于type Bar = {name?: stringage?: string}
Record
Required
作用:生成一个新类型,该类型与 T 拥有相同的属性,但是所有属性皆为必选项
源码
type Require<T> = {[p in keyof T]-?: T[P]}
eg
interface Foo {name: stringage?: number}type Bar = Required<Foo>// 相当于type Bar = {name: stringage: string}
Readonly
作用:生成一个新类型,该类型与 T 拥有相同的属性,但是所有属性皆为必选项
源码
type Require<T> = {[p in keyof T]-?: T[P]}
eg
interface Foo {name: stringage: number}type Bar = Required<Foo>// 相当于type Bar = {readonly name: stringreadonly age: string}
Pick
作用:生成一个新类型,该类型拥有 T 中的 K 属性
源码
type Pick<T, K extends keyof T> = {[p in K]: T[K]}
eg
interface Foo {name: stringage?: numbergender: string}type Bar = Pick<Foo, 'age' | 'gender'>// 相当于type Bar = {age?: stringgender: string}
Exclude
作用:如果 T 是 U 的子类型则返回 never 不是则返回 T
源码
type Exclude<T, U> = T extends U ? never : T
eg
type A = number | string | booleantype B = number | booleantype Foo = Exclude<A, B>// 相当于type Foo = string
Extract
作用: 和 Exclude 相反
源码
type Extract<T, U> = T extends U ? T : never
eg
type A = number | string | booleantype B = number | booleantype Foo = Exclude<A, B>// 相当于type Foo = number | boolean
Omit
作用:生成一个新类型,该类型拥有 T 中除了 K 属性以外的所有属性
源码
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>
eg
type Foo = {name: stringage: number}type Bar = Omit<Foo, 'age'>// 相当于type Bar = {name: string}
