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