打字稿:转换所有函数参数的通用函数类型

时间:2019-10-09 02:59:04

标签: typescript typescript-typings type-inference typescript-generics

在我的项目中,我使用的是称为 ${ver} 的通用类型,该通用类型以某种方式转换了给定类型 Data<X> 。< / p>

现在,我想创建一个通用函数类型 X ,该函数类型将 DataFunction<F extends Function> 的所有参数包装在 {{1} }

例如我想要

F

产生

Data<Parameter>

我可以转换已知数量的参数,这是将第一个参数包装在 DataFunction<(a: Type1, b: Type2) => ReturnType> 中,而使以下参数保持不变:

(a: Data<Type1>, b: Data<Type2>) => ReturnType

我的问题是,如何将以下所有参数包装在 Data<Parameter> 中?我想要这样的东西,它不起作用:

type DataFunction<T extends (arg0: any, ...args: any[]) => any>  
    = T extends (arg0: infer A, ...args: infer P) => infer R  
        ? (arg0: Data<A>, ...args: P) => R  
        : any;

1 个答案:

答案 0 :(得分:2)

这似乎可行:

type DataFunction<F> = F extends (...args: infer A) => infer R
  ? (...args: { [K in keyof A]: Data<A[K]> }) => R
  : any;

PG