【问题标题】:Can I pass in an array for rest parameter?我可以传入一个数组作为休息参数吗?
【发布时间】:2017-05-10 16:12:17
【问题描述】:

我有一个接受休息参数的函数。

function getByIds(...ids: string){
...
}

我知道我可以调用getByIds('andrew')getByIds('andrew','jackson'),它会将字符串转换为字符串数组。

我的问题是:如果我已经将参数合并到一个数组中,我可以打电话给getByIds(['andrew','jackson'])吗?

在 Java 中我知道我可以,但 typescript 似乎给我带来了问题。 JsFiddle 也让我失望了。

【问题讨论】:

  • script seems to give me problems
  • 您是否尝试过使用旧的apply
  • FWIW,你如何定义函数(即带有一个rest参数)实际上是无关紧要的。

标签: typescript ecmascript-6


【解决方案1】:

是的,您可以使用扩展运算符:

getByIds(...['andrew', 'jackson']);

它编译为:

getByIds.apply(void 0, ['andrew', 'jackson']);

【讨论】:

  • 可能值得澄清的是,这不会(直接)将数组分配给其余参数(... 彼此无关)。因此,如果函数签名为function foo(a, ...b){},则'andrew' 将分配给a['jackson'] 将分配给b
  • @FelixKling 如果这是签名,那么您将其更改为:getByIds("string", ...['andrew', 'jackson'])
  • 那不是我的意思...我的意思是...['andrew', 'jackson']...ids 无关。鉴于您说“是的,您可以”,而问题是“我可以传入一个数组作为剩余参数吗?”,不太熟悉 JavaScript 的开发人员可能会对此感到困惑。
  • @FelixKling 好吧,这就是为什么我在回答中包含了这种方法的编译 js。 js代码没有使用扩展运算符...我稍微改变了我的答案。
猜你喜欢
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多