TypeScript里常用的工具类型

Favori,

Utils

图:Amrit Pal Singh

使属性变为可选

type PartialByKeys<T, K extends keyof T> = {
  [P in K]?: T[P];
} & Pick<T, Exclude<keyof T, K>>;

使属性变为必填

type RequiredByKeys<T, K extends keyof T> = {
  [P in K]-?: T[P];
} & Omit<T, K>;

判断类型是否是另一个类型的子类型

type SubtypeOf<T, U> = T extends U ? true : false;

提取 interface 中非函数类型的名

type NonFunctionPropertyNames<T> = {
  [K in keyof T]:T[K] extends Function ? never : K;
}[keyof T];

提取 interface 中非函数类型的属性

type NonFunctionProperties<T> = Pick<T, NonFunctionPropertyNames<T>>;