Angular 8: myMethod не является функцией - PullRequest
0 голосов
/ 29 марта 2020

У меня есть приложение Angular 8 со следующим кодом:

export class ResponseModel<T> {
   status: string;
   message: string;
   data: T;

   isSuccess(): boolean {
      return '00' === status;
   }

}

и следующим ...

this.httpClient.get(myUrl)
  .subscribe((response: ResponseModel<any>) => {

    if (response.isSuccess()) {
        // Rest of the code
    }
}

Объект response: ResponseModel хорошо сериализуется из http результат, но response.isSuccess() выдает ошибку:

TypeError: response.isSuccess() is not a function 

Что может быть не так с моим кодом выше?

1 Ответ

3 голосов
/ 29 марта 2020

Объявляя response: ResponseModel<any>, вы сообщаете компилятору Typescript, что вы ожидаете, что response будет иметь тип ResponseModel<any> или, по крайней мере, будет соответствовать его интерфейсу. Объявление типа автоматически не делает его экземпляром этого типа.

ResponseModel<T> - это класс, который вы создали - клиент http ничего не знает об этом.

response - некоторый объект. Вам нужно создать экземпляр ResponseModel<T> из response, если вы хотите его экземпляр.

this.httpClient.get(myUrl).pipe(
  map((response: any): ResponseModel<any> => {
    const response = new ResponseModel<any>();
    // TODO: set the properties
    response.status = response.status;
    return response;
  })
).subscribe((response: ResponseModel<any>) => {
    if (response.isSuccess()) {
        // Rest of the code
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...