在我的项目中,我使用名为 Data<X>
的泛型类型 正在转换给定类型 X
以某种方式。
现在我想创建一个通用函数类型 DataFunction<F extends Function>
包装了 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;
我的问题是,如何将以下所有参数包装在 Data<Paramter>
中?我想要这样的东西,但不起作用:
type DataFunction<T extends (arg0: any, ...args: any[]) => any>
= T extends (arg0: infer A, ...args: [infer P]) => infer R
? (arg0: Data<A>, ...args: [Data<P>]) => R
: any;
最佳答案
这似乎有效:
type DataFunction<F> = F extends (...args: infer A) => infer R
? (...args: { [K in keyof A]: Data<A[K]> }) => R
: any;
关于Typescript:转换所有函数参数的通用函数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58296449/