在类方法与函数中使用扩展运算符

时间:2018-01-25 18:38:10

标签: javascript typescript spread-syntax

我会尝试保持这种简洁:

我有这个静态类方法

private render(fruit1, fruit2, fruit2){
  console.log(a,b,c)
}

setTable1使用正常函数声明调用。

public setTable1 = function(data) {
 this.render(...data); // spread operator works with func syntax
}

setTable1(['apple','banana','orange']);

但是,setTable2在使用方法语法

时不起作用
public setTable2(data) {
 this.render(...data);
}

除非......我将setTable2更改为:

public setTable2(data) {
  this.render.apply(null, ...data)
}

导致扩展运算符失败的方法与函数语法之间的区别是什么?

1 个答案:

答案 0 :(得分:2)

第一种情况是有效的,因为你在运行时初始化setTable1并且因为你没有设置它的类型,它是any(编译器不知道它是带有一些参数的函数),并且编译器在运行时之前无法检测到任何错误。运行时工作正常,因为它只是一个Javascript。

第二种情况的问题与参数匹配有关。编译器无法检测有多少值...data,可能21,这些值可能与参数计数不匹配。为此,它会抛出参数不匹配的错误。作为一种解决方法,您可以使用参数的默认值,代码也可以使用。

private render(fruit1 = '', fruit2 = '', fruit3 = '') {
  console.log(fruit1, fruit2, fruit3)
}