TypeScript错误 - 类型“{}”不是数组类型或字符串类型

时间:2018-02-18 12:08:59

标签: angular typescript

我有以下代码:

forkJoin([
    this.restangular.all(this.commonService.getHospitalURI()).getList(),
    this.restangular.all(this.commonService.getAgeGroupURI()).getList()
    ]).subscribe(responses => {

    const hospital_result = responses[0];
    // Error because of the line below
    const agegroup_result = Array.from(responses[1]);

    console.log('hospital ' + JSON.stringify(hospital_result))
    console.log('agegroup ' + JSON.stringify(agegroup_result))

    for (const productID_hospital of hospital_result[0]['product']) {

        for (const productID_agegroup of agegroup_result) {
          // Do Something here
        }
    }
  })

我正在使用Angular 5,执行forkjoin以顺序调用响应。这部分完全没问题。但是当它试图解析JSON时会出现错误。

我收到此错误:

src/app/layout/insurance-list/insurance-list.component.ts(75,48): error TS2345: Argument of type '{}' is not assignable to parameter of type 'Iterable<{}>'.
Property '[Symbol.iterator]' is missing in type '{}'.

如果我改变

const agegroup_result = Array.from(responses[1]);

const agegroup_result = responses[1];

然后我会收到错误:

src/app/layout/insurance-list/insurance-list.component.ts(85,50): error TS2495: Type '{}' is not an array type or a string type.

我不明白为什么我会遇到这个错误。我正在解析JSON,因为它首先返回一个数组。由于此错误,我无法运行我的项目。

编辑:

以下是agegroup_result的JSON链接: https://plnkr.co/edit/hzkPXqWfGmNNgHuHwAzT?p=catalogue

它被命名为agegroup.json

编辑2:

console.log(responses[1] instanceof Array)

上面的代码返回true。响应[1]是一个数组。

2 个答案:

答案 0 :(得分:4)

我试图将我的“任何”数据类型映射到特定的DataModel类型,并且得到了相同的错误消息。因此,要解决此问题,我建议您改用数组的索引,我们开始:

更改此行代码:

const agegroup_result = Array.from(responses[1]);

收件人:

const ages = responses[1];

然后,当您执行“ for”循环时,请使用数组的索引:

for ( const i of Object.keys(ages)){
    console.log(ages[i].propertyName);
}

我希望这可以帮助您解决问题。

答案 1 :(得分:1)

它是一个对象,而不是一个数组。尝试使用。从对象获取所有键 Object.Keys函数。

const agegroup_result = Object.keys(responses);

然后您可以迭代响应对象的键,或者您可以将响应映射到数组类型。

如果您添加了响应对象的控制台日志和期望的对象/数组,那么我们可以提供更多帮助。