有没有办法直接将数组项映射到typescript中的函数参数?

时间:2018-05-22 22:06:05

标签: typescript rxjs rxjs5 typescript2.0

我经常最终得到一个带有参数的数组并且必须手动将数组分成几部分的情况。例如

Observable.combineLatest(obs1$, obs2$, obs3$).subscribe((data) => {
  let fancyArg = data[0];
  let epicArg = data[1];
  let wonderfulArg = data[2];
})

是否有做这样的事情的快捷方式

Observable.combineLatest(obs1$, obs2$, obs3$)
  .subscribe([fancyArg, epicArg, wonderfulArg] => { //something like this
    ...                                             //would be great
  })

我知道最后一个参数的选项是函数

Observable.combineLatest(obs1$, obs2$, obs3$, 
  (arg1, arg2, arg3) => {
    return {
      fancyArg:arg1, 
      epicArg:arg2, 
      wonderfulArg:arg3
    }
  })
  .subscribe((args) => {
    ...
  })

但这也非常不方便。我寻找更通用的方法(通过bindCallback和其他函数使用它)

1 个答案:

答案 0 :(得分:3)

Javascript有destructuring assignment,您可以在参数列表中使用它来解压缩数组。例如:



function takeAnArray([firstItem, secondItem, thirdItem]) {
  console.log(firstItem, secondItem, thirdItem);
}

takeAnArray([1, "a", false]);




所以你的第二个片段几乎是正确的。您只需要在参数列表周围添加一对括号:

Observable.combineLatest(obs1$, obs2$, obs3$)
  .subscribe(([fancyArg, epicArg, wonderfulArg]) => {
    // Here, fancyArg is the first array element,
    // epicArg is the second
    // wonderfulArg is the third
  })

documentation for combineLatest甚至在第一个例子中显示了这种语法。