TypeScript之常用泛型工具

203 阅读2分钟

Partial<Type>

用于构造一个Type下面的所有属性都设置为可选的类型,这个工具类型会返回代表给定的一个类型的子集的类型。

type Partial<T> = {
    [k in keyof T]?: T[k]
}

Required<Type>

用于构造一个Type下面的所有属性全都设置为必填的类型,这个工具类型跟Partial相反。

type Required<T> = {
    [k in keyof T]-?: T[k]
}

ReadOnly<Type>

用于构造一个Type下面的所有属性全都设置为只读的类型,意味着这个类型的所有的属性全都不可以重新赋值。

type Readonly<T> = {
    readonly [k in keyof T]: T[k]
}

Mutable<Type>

用于构造一个Type下面的所有属性全都设置为非只读的类型,这个工具类型跟ReadOnly相反。

type Mutable<T> = {
    -readonly [k in keyof T]: T[k]
}

Record<Keys, Type>

用于构造一个对象类型,它所有的key(键)都是Keys类型,它所有的value(值)都是Type类型。这个工具类型可以被用于映射一个类型的属性到另一个类型。

type Record<K extends keyof any, T> = {
    [k in K]: T
}

Exclude<UnionType, Union>

用于构造一个类型,它是从UnionType联合类型里面排除了所有可以赋给ExcludedMembers的类型。

type Exclude<T, U> = T extends U ? never : T

Extract<Type, ExcludedMembers>

用于构造一个类型,它是从Type类型里面提取了所有可以赋给Union的类型。

type Extract<T, U> = T extends U ? T : never

Pick<Type, Keys>

用于构造一个类型,它是从Type类型里面挑了一些属性Keys(Keys是字符串字面量 或者 字符串字面量的联合类型)

type Pick<T, K extends keyof T> = {
    [k in K]: T[k]
}

Omit<Type, Keys>

用于构造一个类型,它是从Type类型里面过滤了一些属性Keys(Keys是字符串字面量 或者 字符串字面量的联合类型)

type Omit<T, K> = Pick<T, Exclude<keyof T, K>>

ReturnType<Type>

用于构造一个含有Type函数的返回值的类型。

type ReturnType<T> = T extends (...args: any[]) => infer U ? U : any

Parameters<Type>

用于根据所有Type中函数类型的参数构造一个元祖类型。

type Parameters<T extends (...params: any[]) => any> = T extends (...params: infer P) => any ? P : never

NonNullable<Type>

用于构造一个类型,这个类型从Type中排除了所有的nullundefined的类型。

type NonNullable1<T> = Exclude<T, null | undefined>
type NonNullable2<T> = T extends null | undefined ? never : T

TypeScript 类型体操姿势合集,向大佬学习。

以上全部内容,如有疑问,欢迎指正。Good Luck!

48.webp