Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 利用函数输入和输出的泛型类型_Typescript_Generics_Typescript2.0 - Fatal编程技术网

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]
}