利用函数输入和输出的通用类型
Generic type that taps on functions inputs and outputs
鉴于:
type SomeService = {
someFunction: (i: string) => number
someOtherFunction: (i: string) => string[]
}
我想要一个通用类型,结果是:
type SomePromisifiedService = {
someFunction: (i: string) => Promise<number>
someOtherFunction: (i: string) => Promise<string[]>
}
下面是一些可能更好地解释这一点的伪代码:
type PromisifyResults<T extends {}> =
{ [k in keyof T]: (...T[k].args) => Promise<T[k].output> }
以下是使用 conditional types added in typescript 2.8 and generic rest parameters (typescript 3.0) 执行此操作的方法:
type PromisifyResults<T> = {
[K in keyof T]:
T[K] extends (...args: infer Args) => infer R
? (...args: Args) => Promise<R>
: T[K]
}
鉴于:
type SomeService = {
someFunction: (i: string) => number
someOtherFunction: (i: string) => string[]
}
我想要一个通用类型,结果是:
type SomePromisifiedService = {
someFunction: (i: string) => Promise<number>
someOtherFunction: (i: string) => Promise<string[]>
}
下面是一些可能更好地解释这一点的伪代码:
type PromisifyResults<T extends {}> =
{ [k in keyof T]: (...T[k].args) => Promise<T[k].output> }
以下是使用 conditional types added in typescript 2.8 and generic rest parameters (typescript 3.0) 执行此操作的方法:
type PromisifyResults<T> = {
[K in keyof T]:
T[K] extends (...args: infer Args) => infer R
? (...args: Args) => Promise<R>
: T[K]
}