【发布时间】:2020-02-06 08:04:58
【问题描述】:
在我的项目中,我使用了一个名为 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;
【问题讨论】:
标签: typescript typescript-typings type-inference typescript-generics