Skip to content
☆´∀`☆
On this page

内置工具类型

属性修饰工具类型

用于对属性的修饰。

Partial

将所有属性变为可选。

原理
ts
type Partial<T> = {
  [P in keyof T]?: T[P];
};
ts
interface Base {
  name: string
  age: number
}
type A = Partial<Base>;

Required<Type>

将所有属性变为必选。

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

Readonly<Type>

将所有属性变为只读。

原理
typescript
type Readonly<T> = {
  readonly [P in keyof T]: T[P];
};

结构工具类型

对既有类型的裁剪、拼接、转换。

Record<Keys, Type>

创建一个新类型,其属性键为Keys,属性值为Type

code
ts
interface A {
  name: string
  age: number
}
type B = Record<'admin' | 'user', A>;

const personMap: B = {
  admin: {
    name: 'a',
    age: 11
  },
  user: {
    name: 'b',
    age: 12
  }
}

interface C extends B {
  groupName: string
}
const groupA: C = {
  groupName: 'a',
  ...personMap
}

Pick<Type, Keys>

Type中选取Keys属性,创建一个新类型。

原理
ts
type MyPick<T, K extends keyof T> = {
  [Key in K]: T[Key];
};
code
ts
interface A {
  name: string
  age: number
  sex?: string
}
type B = Pick<A, 'name' | 'sex'>;

const person: B = {
  name: 'pname'
}

Omit<Type, Keys>

Type中排除Keys属性,创建一个新类型。

code
ts
interface A {
  name: string
  age: number
  sex?: string
}
type B = Omit<A, 'name' | 'sex'>;

const person: B = {
  age: 11
}

NonNullable<Type>

Type中排除nullundefined,创建一个新类型。

code
ts
type A = NonNullable<string | number | undefined | null>; // string | number

集合工具类型

对集合(联合类型)的处理。交集、并集、差集、补集。

Exclude<Type, ExcludedUnion> 差集

Type中排除ExcludedUnion中的类型,创建一个新类型。

code
ts
interface A {
  name: string
  age: number
  sex: string
}
type B = Exclude<keyof A, 'name'>; // "age" | "sex"

Extract<Type, Union> 交集

Type中选取Union中的类型,创建一个新类型。

code
ts
interface A {
  name: string
  age: number
  sex: string
}
type B = Extract<keyof A, 'name' | 'age' | 'phone'>; // "name" | "age"

函数/类工具类型

infer的模式匹配,对一个类型特定位置类型的提取。

Parameters<Type>

元组的形式提取函数的参数类型。

code
ts
type fn = (a: number, b: number) => number;
type A = Parameters<fn>; //  [a: number, b: number]
const params: A = [12, 14]
实现原理
ts
type FunctionType = (...args: any) => any;
type ParametersCustom<T extends FunctionType> = T extends (...args: infer P) => any ? P : never;

ReturnType<Type>

提取函数的返回值类型。

code
ts
type fn = (a: number, b: number) => number;

type A = ReturnType<fn>; //  number
type B = ReturnType<() => void>; // void
实现原理
ts
type FunctionType = (...args: any) => any;
type ReturnType<T extends FunctionType> = T extends (...args: any) => infer R ? R : any;

InstanceType<Type>

提取类的实例类型。

code
ts
class A{
  x = 0
  y = 0
}
type B = InstanceType<typeof A>; // A

const c: B = new A()

模板字符串工具类型

Uppercase<Type> 转大写

ts
type Res = Uppercase<'yomuki'>; // YOMUKI

Lowercase<Type> 转小写

ts
type Res = Lowercase<'YOMUKI'>; // yomuki

Capitalize<Type> 首字母大写

ts
type Res = Capitalize<'yomuki'>; // Yomuki
type Res2 = Capitalize<'YOMUKI'>; // YOMUKI

Uncapitalize<Type> 首字母小写

ts
type Res = Uncapitalize<'Yomuki'>; // yomuki
type Res2 = Uncapitalize<'YOMUKI'>; // yOMUKI