angular - TypeScript-Fehler - Typ '{}' ist kein Array-Typ oder ein String-Typ
Ich habe den folgenden Code:
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
}
}
})
Ich benutze Angular 5 und mache ein ForkJoin, um eine Antwort nacheinander aufzurufen. Dieser Teil ist völlig in Ordnung. Aber der Fehler tritt auf, wenn versucht wird, das JSON zu parsen.
Ich bekomme diesen Fehler:
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 '{}'.
Wenn ich ändere
const agegroup_result = Array.from(responses[1]);
zu
const agegroup_result = responses[1];
Dann bekomme ich einen Fehler:
src/app/layout/insurance-list/insurance-list.component.ts(85,50): error TS2495: Type '{}' is not an array type or a string type.
Ich verstehe nicht, warum ich diesen Fehler habe. Ich analysiere das JSON korrekt, da es zuerst ein Array zurückgibt. Aufgrund dieses Fehlers kann ich mein Projekt nicht ausführen.
Bearbeiten :
Hier ist der Link zum JSON für agegroup_result: https://plnkr.co/edit/hzkPXqWfGmNNgHuHwAzT?p=catalogue
Es wird als agegroup.json bezeichnet
Bearbeiten 2:
console.log(responses[1] instanceof Array)
Der obige Code gibt true zurück. Response[1] ist ein Array.
Antwort #1
Ich habe versucht, meinen "any"-Datentyp auf einen bestimmten DataModel-Typ abzubilden, und ich bekam dieselbe Fehlermeldung. Um das Problem zu lösen, schlage ich vor, stattdessen den Index des Arrays zu verwenden, los geht's:
Ändere diese Codezeile:
const agegroup_result = Array.from(responses[1]);
An :
const ages = responses[1];
Dann, wenn Sie eine "for"-Schleife machen, verwenden Sie bitte den Index des Arrays:
for ( const i of Object.keys(ages)){
console.log(ages[i].propertyName);
}
Ich hoffe, dass dies helfen kann, Ihr Problem zu lösen.
Antwort #2
Es ist ein Objekt, kein Array. Versuche, alle Schlüssel des Objekts mit der Funktion Object.Keys zu bekommen.
const agegroup_result = Object.keys(responses);
Dann können Sie über die Schlüssel des Responses-Objekts iterieren, oder Sie können die Antwort auf einen Array-Typ abbilden.
Wenn du ein Console-Log des Responses-Objekts und des gewünschten Objekts/Arrays, das erwartet wird, hinzufügst, könnten wir vielleicht ein bisschen mehr helfen.
