typescript - Angular HTTP-tjänst returnerar resultat som är inbäddade i ett objekt, hur lägger man till typen?
Jag har en Angular-tjänst som heter FilmService, som använder HttpClient-modulen för att hämta data från ett API. När en komponent använder denna tjänst får den en array av filmer av typen Film. Dock gömmer API:t dessa filmobjekt i ett results-objekt (t.ex. {results: []}). Jag har använt map-operatorn för att bearbeta Observable och returnera results-objektet. Dock klagar min IDE på typen av results i min map-funktion:
Egenskapen 'results' finns inte på typen 'Object'.
Hur skriver jag korrekt tjänstemetoden?
Vänligen se min kod nedan.
Gränssnitt: Film.ts:
export interface Film {
id: number;
title: string;
}
FilmService-metod:
getMostPopular(): Observable<Film[]> {
return this.http.get(this.apiUrl, {
params: {
api_key: this.apiKey,
sort_by: 'popularity.desc'
}
}).pipe(
map((films) => films.results) // Property 'results' does not exist on type 'Object'.
);
}
Svar #1
Om ditt API begraver alla svar i samma typ av wrapper-objekt, kan du definiera en generell svarstyp. HttpClient har en generell typparameter (för de flesta operationer) som representerar returtypen.
Något sådant här:
export interface ApiResponse<T> {
results: T;
errors: string[];
}
använd det sedan på följande sätt:
return this.http.get<ApiResponse<Film[]>>(...).pipe(map(response => response.results));
