关于typescript:分享几个我工作中封装的typeScript方法

TS目前反对的办法曾经有不少了https://www.typescriptlang.or…
然而还是不够,上面分享几个我本人封装的罕用办法


交加

type Intersection<T extends object, U extends object> = Pick<
  T,
  Extract<keyof T, keyof U> & Extract<keyof U, keyof T>
>;


差集

type Diff<T extends object, U extends object> = Omit<
  T & U,
  keyof Intersection<T, U>
>;


将指定属性变为Optional

type PartialKey<U extends object, k extends keyof U> = Partial<U> & Omit<U, k>;


将指定属性变为Required

type RequiredKey<U extends object, K extends keyof U> = U &
  Required<Pick<U, K>>;


获取数组元素类型

type ArrayItem<T extends unknown[]> = T extends (infer P)[] ? P : never;


获取Record中value类型

type RecordValueType<U extends Record<any, unknown>> = U extends Record<any, infer P> ? P : never;


获取Promise返回类型

type PromiseReturnType<U extends Promise<unknown>> = U extends Promise<infer P> ? P : never;

代码: https://stackblitz.com/edit/t…

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理