typescript - Angular: HttpClient-tjänst och Observable-anpassad typ


Min getHeroes-funktion ska returnera Hero[]-objekt, men jag kan inte komma åt dess metoder. Gör jag något fel?

hjälte.ts

export class Hero {
  id: number;
  name: string;

  getName(): string {
    return this.name;
  }
}

heroes.service.ts

getHeroes (): Observable<Hero[]> {
    return this.http.get<Hero[]>(this.heroesUrl)
      .pipe(
        catchError(this.handleError('getHeroes', []))
      );
  }

heroes.component.ts

getHeroes(): void {
  this.heroesService.getHeroes()
    .subscribe(heroes => {
      this.heroes = heroes;
      this.heroes.forEach((hero) => console.log(hero));
      this.heroes.forEach((hero) => console.log(hero.getName())); //ERROR here
    });
}

Jag får ett ERROR TypeError: hero.getName is not a function på sista raden.

Här är en liveversion Live-länk

Svar #1

HTTP-anropet returnerar ett objekt (egentligen bara en JSON-sträng som senare kommer att parsigas av HttpClient) med id och namn och ingen funktion. Du kan kolla det i din nätverksflik.

Vad du skulle kunna göra är helt enkelt att använda en konstruktor:

export class Hero {
  id: number;
  name: string;

  getName(): string {
    return this.name;
  }

  contructor(id, name) {
    this.id = id;
    this.name = name;
   }
}

Och mappa senare svaret från HTTP-anropet till objektet du behöver:

getHeroes (): Observable<Hero[]> {
    return this.http.get<Hero[]>(this.heroesUrl)
      .pipe(
        map(hero => new Hero(hero.id, hero.name),
        catchError(this.handleError('getHeroes', []))
      );
  }