TypeScript:可变函数的类型

ten*_*rno 27 typescript

可能重复:
使用TypeScript的开放式函数参数

可变函数是否有可接受的类型签名?例:

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));
Run Code Online (Sandbox Code Playgroud)

给我编译错误:

foo.ts(9,12): Supplied parameters do not match any signature of call target
Run Code Online (Sandbox Code Playgroud)

moh*_*azy 34

在TypeScript中,您可以使用" ..."来实现上述模式:

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

这应该照顾你的错误.

  • @Lee它不会吞下`string [] | number []`,但是`(number | string)[]`完全没问题(尽管你可能需要在函数体内进行一些转换). (4认同)