Приведение HTTP-ответа из JSON к интерфейсу, который не работает должным образом - PullRequest
0 голосов
/ 02 февраля 2019

Я делаю запрос на получение сервера от углового клиента.Служба, в которой я выполняю вызовы, должна возвращать наблюдаемое с массивом объектов.Проблема в том, что машинопись не позволяет мне приводить JSON к моему интерфейсу.

Это объект JSON, который сервер отправляет в ответ:

export interface Message {
    title: string;
    body: string;
}

Это интерфейс, к которому я хочу привести тело.Там тело должно содержать массив этих объектов:

export interface ICommonGameCard {
    id: string;
    pov: POVType;
    title: string;
    image_pair?: ICommonImagePair;
    best_time_solo: number[];
    best_time_online: number[];
}

export enum POVType{Simple, Free};

Этот сервис, выполняющий запросы:

public getGameCards(povType: POVType): Observable<ICommonGameCard[]> {
    return this.http.get<ICommonGameCard[]>(this.BASE_URL + this.GET_ALL_CARDS_URL)
        .pipe(
          map((res: Response) => return <ICommonGameCard>res.json().body),
          catchError(this.handleError<Message>("getUsernameValidation")),
      );

}

Очевидно, это не работает.Я пытаюсь привести JSON ответа к интерфейсу сообщения, а затем получить доступ к телу интерфейса сообщения, где находится массив ICommonGameCard.

Я получаю эту ошибку:

[ts]
Argument of type 'OperatorFunction<Response, ICommonGameCard>' is not assignable to parameter of type 'OperatorFunction<ICommonGameCard[], ICommonGameCard>'.
  Type 'Response' is missing the following properties from type 'ICommonGameCard[]': length, pop, push, concat, and 26 more. [2345]

Что именно не так с моим синтаксисом?

1 Ответ

0 голосов
/ 02 февраля 2019
export interface Message {
    title: string;
    body: ICommonGameCard[];
}
public getGameCards(povType: POVType): Observable<ICommonGameCard[]> {
    return this.http.get<Message>(this.BASE_URL + this.GET_ALL_CARDS_URL)
        .pipe(
          map((message: Message) => message.body),
          catchError(this.handleError<Message>("getUsernameValidation"))
      );
}
...