Typescript 可不可以键入“;展讯电话;方法?具有条件类型和推断的谜题

Typescript 可不可以键入“;展讯电话;方法?具有条件类型和推断的谜题,typescript,conditional-types,Typescript,Conditional Types,我在工作中遇到了一个问题,我可以用这个例子来总结:是否可以完全键入以下函数 function spreadCall(f1, f2) { const args = f1(); f2(...args); } 因此,我们需要f2接受与f1完全相同数量的参数(即元组),类型的顺序相同。我想不出一个方法来做到这一点——我能想到的部分解决方案是列举几个参数,即 type Output<F> = F extends

我在工作中遇到了一个问题,我可以用这个例子来总结:是否可以完全键入以下函数


    function spreadCall(f1, f2) {
        const args = f1();
        f2(...args);
    }

因此,我们需要f2接受与f1完全相同数量的参数(即元组),类型的顺序相同。我想不出一个方法来做到这一点——我能想到的部分解决方案是列举几个参数,即


    type Output<F> = 
         F extends ()=>[infer A0] ? (a0:A0)=>void :
         F extends ()=>[infer A0, infer A1] ? (a0:A0, a1:A1)=>void :
         F extends ()=>[infer A0, infer A1, infer A2] ? (a0:A0, a1:A1, a2:A2)=>void :
         never;
    // enumerate as many number of arguments as desired ^^

    function spreadCall<InputF>(f1:InputF, f2:Output<InputF>) {
        // ...
    }


类型输出=
F扩展()=>[推断A0]?(a0:a0)=>无效:
F扩展()=>[推断A0,推断A1]?(a0:a0,a1:a1)=>无效:
F扩展()=>[推断A0,推断A1,推断A2]?(a0:a0,a1:a1,a2:a2)=>空隙:
从未;
//根据需要枚举尽可能多的参数^^
函数调用(f1:InputF,f2:Output){
// ...
}
有没有一种方法可以处理任意数量的参数?

我认为您可以使用a来做您想做的事情:

function spreadCall<A extends any[]>(f1: () => A, f2: (...args: A) => any) {
    const args = f1();
    f2(...args);
}
我想你可以用a来做你想做的事:

function spreadCall<A extends any[]>(f1: () => A, f2: (...args: A) => any) {
    const args = f1();
    f2(...args);
}

只要实现不是数组函数,标准javascript函数就会公开包含所有参数的。@ErikPhilips谢谢,但我的问题是关于键入,而不是实现只要实现不是数组函数,标准javascript函数就会公开包含所有参数的。@ErikPhilips谢谢,但我的问题是关于打字,而不是实现