Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
参数中rest参数上的Typescript类型_Typescript - Fatal编程技术网

参数中rest参数上的Typescript类型

参数中rest参数上的Typescript类型,typescript,Typescript,是否可以根据传递的函数的签名告诉typescript rest参数的类型 function myFunc(a: string, b: number) { /* ... */ } function callFn(passedFn: (args...: any[]), ...args: any[]) { passedFn(...args) } callFn(myFunc, 1, 2) // should be a warning 下面的代码显示您得到了编译错误,因为您将失去args下的类型

是否可以根据传递的函数的签名告诉typescript rest参数的类型

function myFunc(a: string, b: number) { /* ... */ }

function callFn(passedFn: (args...: any[]), ...args: any[]) {
  passedFn(...args)
}

callFn(myFunc, 1, 2) // should be a warning

下面的代码显示您得到了编译错误,因为您将失去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);
    }
}

请参见下面的代码,它显示了编译错误,因为您将失去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);
    }
}

请看

你能解释一下你想做什么吗?忘记语法,告诉我们你的理由/特点你能解释一下你想做什么吗?忘记语法,告诉我们你的理由/特点是什么