Ts

Utility Types

TypeScript 内置的工具类型和高级类型,包括 Partial、Required、Readonly、Record、Pick、Omit、Exclude、Extract、NonNullable、Parameters、ReturnType 等。

Partial

将类型中所有属性转换成为可选属性。

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

Required

将类型中所有类型转换为必选属性,与 Partial 相对。

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

Readonly

将类型中所有属性设为只读。

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

Record

构造一个属性的值其类型皆为某种特定类型的类型。有点类似声明 C++ 中的 map,如 map<string, int>

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

Pick

从类型中选取部分属性构造出一个新类型。

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

Omit

从类型中排除指定属性,用剩下的属性构造一个新类型。

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

Exclude

从类型中排除指定项,再用剩下的项构造一个新类型。

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

Extract

取类型的交集,与 Exclude 相对。

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

NonNullable

去除类型中的 null 和 undefined 类型,用剩下的项返回一个新类型。

type NonNullable<T> = T extends null | undefined ? never : T

Parameters

获取函数参数的类型组成的元组类型。

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

ReturnType

返回函数的返回值的类型组成的元组类型。

type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer P ? P : never

Copyright © 2024 Lionad - CC-BY-NC-CD-4.0