将数组传递给TypeScript中的可变参数函数

时间:2018-08-12 12:27:18

标签: typescript

我有一个方法应该接受数字数组或接受可变数量的数字参数(可变)。在我使用的大多数语言中,当使方法/函数可变参数时,它都接受两种方法,但是在TypeScript中似乎不能。当我使该特定函数可变时,我提供number[]的所有地方均编译失败。

供参考的签名(在类ObjectIdentifier中):

constructor(... nodes : number[]) {

此操作失败:

return new ObjectIdentifier(numbers);

其中numbers的类型为number[]

2 个答案:

答案 0 :(得分:2)

这是一种方法:

class ObjectIdentifier {
  public myNodes: number[];
  constructor(first?: number | number[], ...rest: number[]) {
    this.myNodes =
      first === undefined
        ? []
        : first instanceof Array
          ? [...first, ...rest]
          : [first, ...rest];
  }
}
const empty = new ObjectIdentifier();
const a = new ObjectIdentifier(1);
const b = new ObjectIdentifier([1]);
const c = new ObjectIdentifier(1, 2, 3);
const d = new ObjectIdentifier([1, 2, 3]);
const e = new ObjectIdentifier([1, 2, 3], 4, 5, 6);

在最后一种情况下,您可以看到唯一的怪癖,您可以将数组作为第一个参数,后跟可变数量的数字。

答案 1 :(得分:0)

使用以下语法:

const func = (...a: number[]) => console.info('a', a)

func(1, 2, 3)

func(...[1, 2, 3])