Ich hatte vor kurzem eine kleines Typescript Problem und auch etwas gebraucht um das Problem zu finden. Letztendlich liegt es nur daran, dass bei einem HTTP Call der Returntype nicht validiert wird und sich der Fehler dementsprechend durch die Applikation zieht.
Aufbau:
Der Client in Typescript macht einen HTTP Get auf eine ASP .NET Core Web Application API. Das Ergebnis wird von der externen Api in einem Array zurückgeliefert. Trotz falscher Definition des Rückgabewertes als „Promise<Data]>“ kommt an dieser Stelle kein Fehler. Das Deserialisieren der Daten in ein Data Objekt sollte meiner Meinung nach fehlschlagen.
Leider kommt dann nur ein leeres Object zurück.
Falsche Definition
getdataForId(id : string) : Promise<Data> { return this.http.get<Data>(`${this.appConfig.apiUrl}/${id}).toPromise(); }
Angepasste Definition auf „Promise<Data[]>“
getdataForId(id : string) : Promise<Data[]> { return this.http.get<Data[]>(`${this.appConfig.apiUrl}/${id}).toPromise(); }
Client Implementierung:
getFromApi(searchList : LokalData[]) : Promise<Data[]> { var promises = []; for(var p in searchList) { promises.push( this.getdataForId(encodeURIComponent(searchList [p].Id)) .then((data : Data[]) => { return data[0]; }) ) } return Promise.all(promises); }
API Controller in C#:
[HttpGet("{id}")] public Response[] Get(int id) { return new [] { new Response { Id = Guid.NewGuid().ToString(), CurrentDateTime = DateTime.Now }, }; }
Man sollte sich also durchaus bewusst sein, dass es bei Abfragen einer Api keinen Fehler gibt, wenn ein nicht erwartetes Ergebnis zurück kommt.