Partial
将传入的属性变为可选项
type Partial<T> = {
[P in keyof T]?: T[P]
}
Required
将传入的属性都变为必选项
type Required<T> = {
[P in keyof T]-?: T[P]
}
Exclude
排除
Exclude 可以排除联合类型中的一部分
type Lianhe = 'name' | 'value' | 'adc'
// 把name排除
type LH = Exclude<Lianhe, 'name'>
// 如果T能够赋值给U类型的话,那么就会返回never类型,否则返回T类型
// 实现的效果就是把T类型中的U类型给排除掉
// 从T中排除U
type Exclude<T, U> = T extends U ? never : T;
Extract
从T中提取出U
type Extract<T, U> = T extends U ? T : never;
Omit 和 Pick 是相反的两个功能
Pick
从 T 中取出 一系列 K 的属性
type Pick<T, K extends keyof T> = {
[P in K]: T[P]
}
Omit
忽略对象某些属性
type Omit<T, K> = Pick<T, Exclude<keyof T, K>>
type Foo = Omit<{name: string; age: number;}, 'age'> // {name: string}
Readonly 和 Mutable: 属性都设置只读和都取消只读
Readonly
type Readonly<T> = {
readonly [P in keyof T]: T[P]
}
Mutable
将 T 的所有属性的 readonly 移除
type Mutable<T> = {
-readonly [P in keyof T]: T[P]
}
Record
将所有属性的值转为T类型
type Record<K extends keyof any, T> = {
[P in K]: T
}
ReturnType
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;