这有效:
function test(msg:string){
console.log(msg);
}
setTimeout(test, 1000, ["Hi!"];
...因为它将打印出“嗨!” 一秒钟后转到控制台。
这也适用:
function test(){
console.log("Hi!");
}
function callTest(next: () => void){
next();
}
callTest(test);
因为它还打印出“嗨!” 到控制台。
以下结果将导致错误“ TypeError:next不是函数”。为什么?
function test(){
console.log("Hi!");
}
function callTest(next: () => void){
next();
}
setTimeout(callTest, 1000, [test]);
在我看来,它确实像一个功能!如果第一个代码段有效,则表明我通常具有使用setTimeout并将窗体发送参数到回调的权限,而第二个代码段则表明这是调用作为参数传入的函数的正确形式-为什么不正确?我在第三个代码段中使用setTimeout起作用吗?
您只需要在传递给参数的末尾直接传递参数列表setTimeout
:
setTimeout(callTest, 1000, test);
如果您有更多的论点,您可以这样做:
setTimeout(callTest, 1000, test, a, b, c);
无需像调用call那样将它们放在数组中Function.prototype.apply
。出现错误的原因是,您执行此操作的方式是setTimeout
传递一个长度为1的数组,该数组包含对该test
函数的引用。
您先前使用该字符串的示例起作用的原因是,console.log
将数组转储到控制台绝对是可以的。而且TypeScript没有机会发布它,因为这是何时存在要传递给将被调用的函数的参数列表的定义setTimeout
:
declare function setTimeout(handler: any, timeout?: any, ...args: any[]): number;
如您所见,使用可以关闭类型检查any
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句