代码之家  ›  专栏  ›  技术社区  ›  Joon

用typescript中的映射函数替换函数的返回类型

  •  0
  • Joon  · 技术社区  · 6 年前

    我想用映射函数替换函数的返回类型。 它应该是这样的:

    // typescript 2.9, so no tuple arguments support yet.
    type WithNewReturnType<
      F1 extends (...args: T[]) => V,
      F2 extends (arg: V) => MV,
      T,
      V,
      MV
    > = ((...args: T[]) => MV);
    
    // use case
    const chain = <F1, F2>(f1: F1, f2: F2): WithNewReturnType<F1, F2> =>
      (...args) => f2(f1(...args));
    

    F1的返回类型应与F2的参数类型匹配。

    上述代码有两个问题:

    1. 它表示f1和f2未使用。
    2. 它需要5个参数而不是2个,比如withNewReturnType。

    如何只用两个参数来保持约束, R<F1> === A<F2> ?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Joon    6 年前

    玩了一会儿,我自己也想出了一个答案:

    export type Chained<F1, F2> = F1 extends (
      ...args: Array<infer T>
    ) => infer V
      ? (F2 extends (arg: V) => infer MV ? ((...args: T[]) => MV) : never)
      : never;