查看MDN中的这个简单代码:
function myFunction(x, y, z):void { }
var args = [0, 1, 2];
myFunction(...args);
即使我非常清楚:
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));
但不是。
答案 0 :(得分:1)
就TypeScript而言,您将数组传递给带有三个参数的函数。因此签名不匹配错误。
让我在这里说清楚:你所拥有的是绝对有效 ES2015 JavaScript。它只是无效的TypeScript。
(<any>myFunction)
将myFunction
转换为&#34;任何&#34;,因此TypeScript不会查看函数定义。 (<any>)(myFunction(...args));
会告诉编译器调用myFunction
的结果是any
。