不积跬步,无以至千里。

我的学习笔记

首页

前端框架

react

内容更新于: 2024-03-02 05:07:36

ts-类型工具

前言:记述typescript一些常用的类型工具。例如:Omit、Pick、Extract等

Awaited

Awaited<Type>用来取出 Promise 的返回值类型,适合用在描述then()方法和 await 命令的参数类型。


type Awaited<T> =
  T extends null | undefined ? T :
  T extends object & {
    then(
      onfulfilled: infer F,
      ...args: infer _
    ): any;
  } ? F extends (
    value: infer V,
    ...args: infer _
  ) => any ? Awaited<...> : never:
  T;


Exclude

Exclude<UnionType, ExcludedMembers>用来从联合类型UnionType里面,删除某些类型ExcludedMembers,组成一个新的类型返回。


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


Extract

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

Omit

Omit<Type, Keys>用来从对象类型Type中,删除指定的属性Keys,组成一个新的对象类型返回。


interface A {
  x: number;
  y: number;
type T1 = Omit<A, 'x'>;       // { y: number }
type T2 = Omit<A, 'y'>;       // { x: number }
type T3 = Omit<A, 'x' | 'y'>; // { }


实现如下:


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


Pick

Pick<Type, Keys>返回一个新的对象类型,第一个参数Type是一个对象类型,第二个参数Keys是Type里面被选定的键名。


interface A {
  x: number;
  y: number;
}

type T1 = Pick<A, 'x'>; // { x: number }
type T2 = Pick<A, 'y'>; // { y: number }
type T3 = Pick<A, 'x'|'y'>;  // { x: number; y: number }


实现如下


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


本文结束