除了使用可选参数或重载来创建可以接受各种固定参数计数的函数之外,我们还可以使用剩余参数定义具有无限数量参数的函数。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 操作符的结果不能直接赋给一个变量,必须用数组包一层。