typescript:类型“ any []”的参数不能分配给类型“ []”的参数。ts(2345)

时间:2019-04-30 08:12:02

标签: javascript typescript

export class ServiceAreaComponent implements OnInit, OnDestroy {
  _clickedPoint = [];

  this.serviceArea.getToken().subscribe((d) => {
    this.isLoading = true;
    this.getServiceArea(this._clickedPoint);
  })
}

getServiceArea(pointArray: [], driveTimeList ? : any) {}

我已经声明了一个名为_clickedPoint = []的类属性作为数组。打字稿将其作为Array<any>。 同时,我在类内部创建了一个方法来接受单击的点,并声明了一个名为pointArray:[]的方法参数,与_clickedPoint一样。这次这次打字稿接受了这个没有分配任何类型的数组。我只是想知道为什么打字稿没有将类型any分配给方法参数

1 个答案:

答案 0 :(得分:3)

_clickedPoint = [];是没有类型的成员的初始化(具有空数组)。 Typescript会将_clickedPoint的类型推断为任何类型的数组(因此any[]never[]取决于编译器设置,但您似乎属于前一种情况)

pointArray: []是类型为empty tulpe([])的参数。运行时的元组是数组,但是Typescript将检查元组的长度和元组中的项是否为正确的类型(有关元组here的更多信息)

如果没有指定类型,Typescript会推断类型,例如,当您不指定成员的类型时,但是它将获取您在类型注释中拼出的确切类型,而无需添加任何内容,例如当您指定时它作为参数。在这种情况下,由于空数组文字[]与空元组类型(也是[]但用作类型注释)的类型不同,这有点令人困惑。

您真正想要的是让pointArray为数组类型:

export class ServiceAreaComponent {
  _clickedPoint = [];
  test() {
    this.getServiceArea(this._clickedPoint);
  }
  getServiceArea(pointArray: any[], driveTimeList?: any) {
  }
}