如何从类型/接口中仅提取异步函数

时间:2020-08-03 11:20:00

标签: typescript typescript-typings

给出一个实用程序ExtractKeysOfType,该实用程序仅允许检索与目标匹配的类型/接口的键,并且Pick类型可以轻松地从给定类型/接口提取函数。
我要完成的是从基本类型中仅提取异步功能(而不是所有签名)。

关于如何实现这一目标的任何线索吗?

type ExtractKeysOfType<T, Target> = {
  [K in keyof T]: T[K] extends Target ? K : never
}[keyof T]

type Type = {
  prop: boolean
  fn (): boolean
  fn (): Promise<boolean>
}

type OnlyFunc = Pick<
  Type,
  ExtractKeysOfType<Type, (...as: any) => any>
> // {fn (): {boolean; Promise<boolean>}

type OnlyAsync = ??? // Someway to build type such as OnlyAsync: {fn (): Promise<boolean>}

1 个答案:

答案 0 :(得分:0)

this answer为灵感,我们可以使用mappedconditional类型来定义OnlyAsync类型,如下所示:

// finds keys of Promise returning function members
type PromiseFuncKeys<T> = {
    [K in keyof T]: T[K] extends ((...args: any[]) => Promise<any>) ? K : never;
}[keyof T]
// so we can Pick them
type OnlyAsync<T> = Pick<T, PromiseFuncKeys<T>>; 

这里的another answer应该可以使您了解这里发生的事情。