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