我无法弄清楚如何解决第二次调用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
答案 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?) => { }, {});
};