ts 可以使用泛型来做类型映射,将对象或数组中类型转换为另一个类型。

例如:定义一个类型

interface Student {
  name: string;
  age: number;
}
  1. 把一个类型的每个属性都变为可空的
type Nullable<T> = {
  [p in keyof T]: T[P] | null;
};

type NullableStudent = Nullable<Student>;
  1. 把一个类型的每个属性都变为只读的
//定义readonly映射
type Readonly<T> = {
  readonly [P in keyof T]: T[P];
};

type ReadonlyStudent = Readonly<Student>;
  1. 把一个类型的属性都变为可选的
type Partical<T> = {
  [P in keyof T]?: T[P];
};

type ParticalStudent = Partical<Student>;
  1. 把一个类型的每个项都变为 Promise
//定义toPromise映射
type ToPromise<T> = { [K in keyof T]: Promise<T[K]> };

type Coordinate = [number, number];

type PromiseCoordinate = ToPromise<Coordinate>; // [Promise<number>, Promise<number>]