在我的项目中,我使用的是称为 ${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;
答案 0 :(得分:2)
这似乎可行:
type DataFunction<F> = F extends (...args: infer A) => infer R
? (...args: { [K in keyof A]: Data<A[K]> }) => R
: any;