2012-10-02 70 views
16

Possible Duplicate:
open-ended function arguments with TypeScriptTypeScript:可變類函數的類型

是否有可變類型函數的可接受類型簽名?例如:

function sum() { 
    var sum = 0; 
    for (var i = 0; i < arguments.length; i++) { 
    sum += arguments[i]; 
    } 
    return sum; 
}; 

console.log(sum(1, 2, 3, 4, 5)); 

給我的編譯錯誤:

foo.ts(9,12): Supplied parameters do not match any signature of call target 
+1

請參閱http://stackoverflow.com/questions/12697275/open-ended-function-arguments-with-typescript/12697349#12697349 - 與TypeScript的開放式函數參數 –

回答

23

在打字稿,您可以使用 「...」 才達到上面的圖案:

function sum (...numbers: number[]) { 
    var sum = 0; 
    for (var i = 0; i < numbers.length; i++) { 
    sum += numbers[i]; 
    } 
    return sum; 
}; 

這應該把你的錯誤的照顧。

+0

我想它不支持多種類型特徵?例如,這將不會編譯:foo(... item:string [] | number []) – Lee

+1

@Lee它不會吞下'string [] | number []',但'(number | string)[]'完全可以(儘管您可能需要在函數體內部進行一些轉換)。 – Borsunho