Spread语法和Typescript - 提供的参数不匹配?

时间:2017-06-21 16:54:34

标签: javascript typescript ecmascript-6

查看MDN中的这个简单代码:

function myFunction(x, y, z):void { }
var args = [0, 1, 2];
myFunction(...args);

— I get an error

enter image description here

即使我非常清楚:

function myFunction(x, y, z):void { }
var args:any[3] = [0, 1, 2];
myFunction(...args:any[3]);

它仍然无法运作。

问题:

为什么它不起作用,我错过了什么?

我已经看过this answer通过以下方式缓解错误:

function myFunction(x, y, z):void { }
var args  = [0, 1, 2];
(<any>myFunction)(...args);

为什么<any>会将错误静音? 如果它是:

,它会很清楚

(<any>)(myFunction(...args));但不是。

1 个答案:

答案 0 :(得分:1)

就TypeScript而言,您将数组传递给带有三个参数的函数。因此签名不匹配错误。

让我在这里说清楚:你所拥有的是绝对有效 ES2015 JavaScript。它只是无效的TypeScript。

(<any>myFunction)myFunction转换为&#34;任何&#34;,因此TypeScript不会查看函数定义。 (<any>)(myFunction(...args));会告诉编译器调用myFunction的结果是any