关于参数的休息参数的打字稿类型

时间:2017-08-14 22:00:26

标签: typescript

是否有可能根据传递的函数的签名告诉typescript有关休息参数的类型?

$row

1 个答案:

答案 0 :(得分:0)

以下代码显示您遇到编译错误,因为您将失去args下的类型控制。

interface ICallback 
{ 
    (a: string, b: number): void
}

class Test
{    
    public CallFn(passedFn: ICallback, ...args: any[]): void
    {
        passedFn(args); // error
        passedFn("1", 2);
    }    
}

class Callback
{    
    public MyFunction = (a: string, b: number) => 
    {
         alert("it's working");
    }
}

let testIntance = new Test();
let callbackIntance = new Callback();

testIntance.CallFn(callbackIntance.MyFunction, 1, 2);

您必须处理异常并尝试解析为类型变量。

class Test
{    
    public CallFn(passedFn: ICallback, ...args: any[]): void
    {
        //passedFn(args); // error

        let hasTwoArguments = args && args.length && args.length === 2;
        if(!hasTwoArguments)
        {
            return;
        }

        let firstArgument: string = args[0];
        let secondArgument: number = parseInt(args[1]);

        passedFn(firstArgument, secondArgument);
    }
}

请参阅demo