除了使用可選參數或重載來建立可以接受各種固定參數計數的函數之外,我們還可以使用剩餘參數定義具有無限數量參數的函數。rest 參數出現在所有其他參數之後,并使用 … 文法:
看個例子:
function multiply(n: number, ...m: number[]) {
return m.map((x) => n * x);
}
function multiplyArray(n: number, m: number[]) {
return m.map((x) => n * x);
}
const a = multiply(10, 1, 2, 3, 4);
console.log(a);
const b = multiply(10, [1,2,3,4]);
console.log(b);
const c = multiplyArray(10, [1,2,3,4]);
console.log(c);

如果需求是允許傳入多個數組,該怎麼寫?
type JerryArray = number[];
function multiply(n: number, ...m: JerryArray[]) {
return m.map( (stillArray) => stillArray.map((x) => n * x ));
}
const b = multiply(10, [1,2,3,4], [5,6,7,8]);
console.log(b);
注意:rest parameter 的類型,必須為數組類型。
在 TypeScript 中,這些參數上的類型注解是隐式的 any[] 而不是 any,并且給出的任何類型注解都必須是 Array 或 T[] 的形式,或者是元組類型。
1
如果把三個點去掉,文法錯誤,因為數組的 push 方法,輸入參數不能是數組:
而應該是 number 的序列:
把 push 的輸入參數從數組,改成 4,5,6,7這種 number 序列就能夠正常工作了:
spread 操作符的結果不能直接賦給一個變量,必須用數組包一層。
6