Typescript 0.9.5不允许在回调中使用可变数量的参数?

时间:2014-01-03 17:16:26

标签: typescript

我无法弄清楚如何解决第二次调用greeter.invoke导致的错误。我相信这是由于0.9.5的变化。我错误地认为声明说回调可能包含任意数量的参数?它似乎有完全相反的影响,并要求回调接受0参数。

class Greeter {
    invoke(context: Object, fn: (...args: any[]) => void, args: any) {
    }
}

window.onload = () => {
    var greeter = new Greeter();
    greeter.invoke({}, () => { }, {});
    greeter.invoke({}, (a) => { }, {});
};

错误是这样的:

错误1提供的参数与调用目标的任何签名都不匹配:     呼叫类型'(a:any)=>的签名void'和'(... args:any [])=> void'不兼容:         呼叫签名需要0个或更少的参数。 J:\ Code \ VS2013 \ TypeScriptHTMLApp1 \ TypeScriptHTMLApp1 \ app.ts 9 13 TypeScriptHTMLApp1

2 个答案:

答案 0 :(得分:1)

对于您的回调函数声明,请改用Function

class Greeter {
    invoke(context: Object, fn: Function, args: any) {
    }
}

答案 1 :(得分:1)

由于可变数量的参数意味着所有参数都是可选的,因此您使用的函数也应将参数定义为可选参数,请注意greeter.invoke({}, (a?) => { }, {});

class Greeter {
    invoke(context: Object, fn: (...args: any[]) => void, args: any) {
    }
}

window.onload = () => {
    var greeter = new Greeter();
    greeter.invoke({}, () => { }, {});
    greeter.invoke({}, (a?) => { }, {});
};