繁体   English   中英

在 Typescript 中推断多个 generics

[英]Infer multiple generics in Typescript

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

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

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

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

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

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 ,这正是我想要实现的目标。 解决方案是为代理 function 创建辅助条件类型:

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);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM