TypeScript 工具类型

TypeScript 附带了大量类型,可以帮助进行一些常见的类型操作,通常称为工具类型(实用类型)。

本章介绍了最流行的工具类型(Utility Type)。


Partial

Partial 更改对象中的所有属性为可选。

实例
  1. interface Point {
  2. x: number;
  3. y: number;
  4. }
  5. let pointPart: Partial<point> = {}; // `Partial` 使得 x 与 y 都变成可选
  6. pointPart.x = 10;
  7. console.log(pointPart);

Required

Required 更改对象中的所有属性为必须的。

实例
  1. interface Car {
  2. make: string;
  3. model: string;
  4. mileage?: number;
  5. }
  6. let myCar: Required<car> = {
  7. make: 'Ford',
  8. model: 'Focus',
  9. mileage: 12000 // `Required` 强制 mileage 必须定义
  10. };
  11. console.log(myCar);

Record

Record 是定义具有特定键类型和值类型的对象类型的简写方式。

实例
  1. const nameAgeMap: Record<string, number=""> = {
  2. 'Alice': 21,
  3. 'Bob': 25
  4. };
  5. console.log(nameAgeMap);
Record<string, number> 相当于 { [key: string]: number }

Omit

Omit 从对象类型中删除 key。

实例
  1. interface Person {
  2. name: string;
  3. age: number;
  4. location?: string;
  5. }
  6. const bob: Omit<person, 'age'="" |="" 'location'=""> = {
  7. name: 'Bob'
  8. // `Omit` 已从类型中删除了 age 和 location,无法在此处定义
  9. };
  10. console.log(bob);

Pick

Pick 从对象类型中删除除指 key 以外的所有 key。

实例
  1. interface Person {
  2. name: string;
  3. age: number;
  4. location?: string;
  5. }
  6. const bob: Pick<person, 'name'=""> = {
  7. name: 'Bob'
  8. // `Pick` 只保留了 name,因此 age 和 location 已从类型中删除,无法在此处定义
  9. };
  10. console.log(bob);

Exclude

Exclude 从联合类型中删除类型。

实例
  1. type Primitive = string | number | boolean;
  2. const value: Exclude<primitive, string=""> = true;
  3. // 此处不能使用 string,因为 Exclude 将其从类型中删除。
  4. console.log(typeof value);

ReturnType

ReturnType 提取函数类型的返回类型。

实例
  1. type PointGenerator = () => { x: number; y: number; };
  2. const point: ReturnType<pointgenerator> = {
  3. x: 10,
  4. y: 20
  5. };

参数

Parameters 将函数类型的参数类型提取为数组。

实例
  1. type PointPrinter = (p: { x: number; y: number; }) => void;
  2. const point: Parameters<pointprinter>[0] = {
  3. x: 10,
  4. y: 20
  5. };