我想通过使用映射函数来替换函数的返回类型。 它应该看起来像这样:
// 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的参数类型匹配。
上面的代码有两个问题:
如何仅使用两个保持约束R<F1> === A<F2>
的参数来做到这一点?
答案 0 :(得分:1)
玩转之后,我自己想出了一个答案:
export type Chained<F1, F2> = F1 extends (
...args: Array<infer T>
) => infer V
? (F2 extends (arg: V) => infer MV ? ((...args: T[]) => MV) : never)
: never;