TS 工具类型

607 阅读1分钟

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;