Typescript 利用函数输入和输出的泛型类型
鉴于: 我想要一个泛型类型,其结果是:Typescript 利用函数输入和输出的泛型类型,typescript,generics,typescript2.0,Typescript,Generics,Typescript2.0,鉴于: 我想要一个泛型类型,其结果是: type SomeService = { someFunction: (i: string) => number someOtherFunction: (i: string) => string[] } type SomePromisifiedService={ someFunction:(i:string)=>Promise someOtherFunction:(i:string)=>Promise } 下面是一
type SomeService = {
someFunction: (i: string) => number
someOtherFunction: (i: string) => string[]
}
type SomePromisifiedService={
someFunction:(i:string)=>Promise
someOtherFunction:(i:string)=>Promise
}
下面是一些伪代码,也许可以更好地解释这一点:
type SomePromisifiedService = {
someFunction: (i: string) => Promise<number>
someOtherFunction: (i: string) => Promise<string[]>
}
类型PromisifyResults=
{[k in keyof T]:(…T[k].args)=>Promise}
以下是如何通过在typescript 2.8和(typescript 3.0)中添加的代码来实现这一点:
类型PromisifyResults={
[K in keyof T]:
T[K]扩展(…args:inferargs)=>inferr
(…args:args)=>承诺
:T[K]
}
@Birowsky见更新答案-简化且不限于函数参数计数
type PromisifyResults<T extends {}> =
{ [k in keyof T]: (...T[k].args) => Promise<T[k].output> }
type PromisifyResults<T> = {
[K in keyof T]:
T[K] extends (...args: infer Args) => infer R
? (...args: Args) => Promise<R>
: T[K]
}