2017-06-21 47 views
1

看着这个简单的代码MDN扩展语法和Typescript - 提供的参数不匹配?

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));,但事实并非如此。

+0

我遇到过同样的问题。 'myFunction.apply(null,args)'起作用。 – mhodges

+0

这是'myFunction'的确切代码吗?你确定'x,y,z'没有类型吗? – Bergi

回答

1

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

让我在这里明白:你有什么是绝对有效 ES2015 JavaScript。这只是无效的TypeScript。

(<any>myFunction)强制将myFunction作为“什么”,所以TypeScript不会查看函数定义。 (<any>)(myFunction(...args));会告诉编译器调用myFunction的结果是any

+0

但是我传递了一个数组,明确指出任何[3]' –

+0

...和?它仍然是一个数组(好吧,由三个元素组成的数组,但仍然是一个数组)传递给一个带有三个单独的必需参数的函数。 –

+0

我可能会错过一些东西,但这是'... args'的工作。将“[0,1,2]”的数组“分解”为“0,1,2”。所以事情应该很好,不是吗? myfunction仍然会得到它所期望的:3个值不是数组 - 而是简单的参数。就像'.apply'一样 –

相关问题