【问题标题】:Typescript: Generic function type transforming all function paramtersTypescript:转换所有函数参数的通用函数类型
【发布时间】: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&lt;Parameter&gt; 中,保持以下参数不变:

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&lt;Paramter&gt; 中?我想要这样的东西,但它不起作用:

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


    【解决方案1】:

    这似乎有效:

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

    PG

    【讨论】:

      猜你喜欢
      • 2015-08-21
      • 2020-10-31
      • 2013-11-03
      • 1970-01-01
      • 2021-07-08
      • 2012-09-23
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多