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

Posted

技术标签:

【中文标题】将数组传递给 TypeScript 中的可变参数函数【英文标题】:Pass array to variadic function in TypeScript 【发布时间】:2019-01-19 09:16:30 【问题描述】:

我有一个方法应该接受一个数字数组或接受可变数量的数字参数(可变参数)。在我使用的大多数语言中,当您制作方法/函数可变参数时,它同时接受两者,但在 TypeScript 中,您似乎不能。当我将这个特定的函数设为可变参数时,我提供 number[] 的所有地方都无法编译。

签名供参考(ObjectIdentifier 类):

constructor(... nodes : number[]) 

这失败了:

return new ObjectIdentifier(numbers);

其中numbers 的类型为number[]

【问题讨论】:

重载构造函数签名:***.com/a/12702786/6680611 【参考方案1】:

使用以下语法:

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

func(1, 2, 3)

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

【讨论】:

【参考方案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);

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

【讨论】:

只有当你无法控制你被两种方式调用时才应该使用,否则在传递数组时只需使用扩展运算符

以上是关于将数组传递给 TypeScript 中的可变参数函数的主要内容,如果未能解决你的问题,请参考以下文章

将多维数组传递给函数 C

38 py改变函数参数的值关键字参数和参数默认值函数中可变参数将序列中的元素值作为函数对应的参数值传

使用Typescript和类组件装饰器时如何将数组传递给Vue中的props

传递可变大小的多维数组

一文读懂《Effective Java》第42条:慎用可变参数

将可变参数列表传递给 syslog