Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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
Javascript Can';似乎没有将函数传递给node.js(TypeScript)中的setTimeout参数数组_Javascript_Node.js_Typescript_Settimeout - Fatal编程技术网

Javascript Can';似乎没有将函数传递给node.js(TypeScript)中的setTimeout参数数组

Javascript Can';似乎没有将函数传递给node.js(TypeScript)中的setTimeout参数数组,javascript,node.js,typescript,settimeout,Javascript,Node.js,Typescript,Settimeout,这项工作: function test(msg:string){ console.log(msg); } setTimeout(test, 1000, ["Hi!"]; …在一秒钟后,它将向控制台打印“嗨!” 这也适用于: function test(){ console.log("Hi!"); } function callTest(next: () => void){ next(); } callTest(test); 在这种情况下,它还会向控制台输出“嗨!

这项工作:

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不是函数”。为什么?


对我来说,这确实是一个功能!如果第一个代码段正常工作,则表明我通常有权使用setTimeout并向回调发送参数,第二个代码段显示,这是调用作为参数传入的函数的正确形式-为什么我在第三个代码段中使用setTimeout不起作用?

您只需要在传递给
setTimeout
的参数末尾直接传递参数列表:

setTimeout(callTest, 1000, test);
如果你有更多的争论,你会:

setTimeout(callTest, 1000, test, a, b, c);
没有必要像打电话一样将它们放入数组中。出现错误的原因是,执行此操作的方式
setTimeout
传递了一个长度为1的数组,该数组包含对
test
函数的引用

前面的字符串示例之所以有效,是因为
console.log
完全可以将数组转储到控制台。TypeScript没有机会对此提出质疑,因为这是一个参数列表,当有参数传递给将被调用的函数时:

declare function setTimeout(handler: any, timeout?: any, ...args: any[]): number;

正如您所见,类型检查通过使用
any

关闭,您只需在传递给
setTimeout
的参数末尾直接传递参数列表:

setTimeout(callTest, 1000, test);
如果你有更多的争论,你会:

setTimeout(callTest, 1000, test, a, b, c);
没有必要像打电话一样将它们放入数组中。出现错误的原因是,执行此操作的方式
setTimeout
传递了一个长度为1的数组,该数组包含对
test
函数的引用

前面的字符串示例之所以有效,是因为
console.log
完全可以将数组转储到控制台。TypeScript没有机会对此提出质疑,因为这是一个参数列表,当有参数传递给将被调用的函数时:

declare function setTimeout(handler: any, timeout?: any, ...args: any[]): number;

正如您所看到的,类型检查是通过使用
any

Ah关闭的-所以您不传递参数数组,而是一直列出它们?就像callTest接受2个参数一样:
setTimeout(callTest,1000,param1,param2)
?为什么在我的第一个示例中没有得到一个TypeError,在这个示例中,我传递了一个数组作为参数,而它需要一个字符串?(你完全正确,我会将此标记为正确答案,但我只想完全理解。)你在评论中显示的
setTimeout
是正确的。您的第一个示例有一个错误。在
callTest
函数中,您直接调用
test()
,而不是调用
next()
。这只是一个发布错误-我在问题中修复了它。你的回答为我做到了(只是等待时间过去标记为完成)。我很好奇为什么在第一个代码段中它没有给出类型错误,但我想console.log可以接受一个字符串数组,函数签名不会抛出类型错误,所以这是有意义的。是的,我关注的是错误的示例。我已经编辑了我的答案来解决前面的例子。如果解释需要澄清,请告诉我。非常合理。我只想说,我是在阅读说明
setTimeout(callback,delay[,…args])
的文档时犯了这个错误的,但我将其理解为
setTimeout(callback,delay,[…args])
。一个字符的差异(我的错误)和它送我下这个兔子洞!啊-所以你没有传递一个参数数组,你只是一直列出它们?就像callTest接受2个参数一样:
setTimeout(callTest,1000,param1,param2)
?为什么在我的第一个示例中没有得到一个TypeError,在这个示例中,我传递了一个数组作为参数,而它需要一个字符串?(你完全正确,我会将此标记为正确答案,但我只想完全理解。)你在评论中显示的
setTimeout
是正确的。您的第一个示例有一个错误。在
callTest
函数中,您直接调用
test()
,而不是调用
next()
。这只是一个发布错误-我在问题中修复了它。你的回答为我做到了(只是等待时间过去标记为完成)。我很好奇为什么在第一个代码段中它没有给出类型错误,但我想console.log可以接受一个字符串数组,函数签名不会抛出类型错误,所以这是有意义的。是的,我关注的是错误的示例。我已经编辑了我的答案来解决前面的例子。如果解释需要澄清,请告诉我。非常合理。我只想说,我是在阅读说明
setTimeout(callback,delay[,…args])
的文档时犯了这个错误的,但我将其理解为
setTimeout(callback,delay,[…args])
。一个字符的差异(我的错误)和它送我下这个兔子洞!