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

Typescript 如何仅从类型/接口提取异步函数,typescript,typescript-typings,Typescript,Typescript Typings,给定一个实用工具ExtractKeysOfType,它只允许检索与目标匹配的类型/接口的键,而Picktype i可以轻松地从给定类型/接口提取函数。 我想要完成的是从基类型中只提取异步函数(而不是所有签名) 关于如何做到这一点有什么线索吗 type ExtractKeysOfType<T, Target> = { [K in keyof T]: T[K] extends Target ? K : never }[keyof T] type Type = { prop: b

给定一个实用工具
ExtractKeysOfType
,它只允许检索与目标匹配的类型/接口的键,而
Pick
type i可以轻松地从给定类型/接口提取函数。
我想要完成的是从基类型中只提取异步函数(而不是所有签名)

关于如何做到这一点有什么线索吗

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>}
type ExtractKeysOfType={
[K in keyof T]:T[K]扩展目标?K:从不
}[keyof T]
类型类型={
道具:布尔
fn():boolean
fn():承诺
}
仅键入func=拾取<
类型,
ExtractKeysOfType any>
>//{fn():{boolean;Promise}
类型OnlyAsync=???//以某种方式生成类型,例如OnlyAsync:{fn():Promise}
根据灵感,我们可以使用和类型定义
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>>; 
//查找承诺返回函数成员的键
类型PromiseFuncKeys={
[K in keyof T]:T[K]扩展((…args:any[])=>承诺,这应该会对这里发生的事情有所启发。

作为灵感,我们可以使用和类型定义一个
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>>; 
//查找承诺返回函数成员的键
类型PromiseFuncKeys={

[K in keyof T]:T[K]扩展((…args:any[]))=>承诺这会让我们对这里发生的事情有所了解。

我试过了,但它提取了所有函数这里的问题是函数具有相同的名称,因此通过选择名称nad然后
选择
在相同的基础上,我们确实得到了所有函数定义,不仅仅是异步的。链接的答案是我问题中提供的定义(我刚才问了一个问题^^^)我试过了,但它提取了所有函数这里的问题是函数具有相同的名称,因此通过选择名称nad然后
Pick
在相同的基础上,我们得到了所有的函数定义,不仅是异步的,链接的答案是我问题上提供的定义(还有我刚才问的一个问题^^)