在 Typescript 中推断多个泛型

Infer multiple generics in Typescript

这是我希望能够执行的操作的抽象示例: 假设我有一个工具可以为我提供具有以下格式的类型:

type FunctionA<In, Out> = (input: In) => Out;

我还有另一个工具,它是一种具有以下镜像格式的方法:

const funcB = <Out, In>(input: In) => input as any as Out;

我想做的是,不使用底层类型,而是编写一个函数,从第一个工具中推断出这些类型,然后使用这些推断出的类型调用第二个工具。理想情况下它看起来像这样,尽管这段代码显然不正确:

const funcC = <Func extends FunctionA<infer I, infer O>>(input: I) => funcB<O, I>(input);

这样我就可以像这样使用它了:

/** Outside Source */
type A = FunctionA<string, number>;
/** Outside Source */

funcC<A>('text');

起初看起来似乎很简单,但我似乎无法想出办法。

谢谢,@jcalz,这正是我想要实现的目标。解决方案是为代理函数创建辅助条件类型:

type In<F extends FunctionA<any, any>> = F extends FunctionA<infer I, any> ? I : never;
type Out<F extends FunctionA<any, any>> = F extends FunctionA<any, infer O> ? O : never;

const funcC = <F extends FunctionA<any, any>>(input: In<F>) => funcB<Out<F>, In<F>>(input);

抱歉抽象,这是我 运行 在过去尝试连接不同工具时遇到过几次的情况,但从来没有时间正确解决。可悲的是,我不记得一个具体的例子可以在问题中正确使用,而且看起来好像缺少什么。