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));