2017-06-21 28 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'一樣 –

相關問題