给出一个实用程序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>}
答案 0 :(得分:0)
以this answer为灵感,我们可以使用mapped和conditional类型来定义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应该可以使您了解这里发生的事情。