Почему я получаю сообщение об ошибке «Тип Observable не может быть присвоен типу «Observable»?

#angular #typescript #ionic3

#angular #typescript #ionic3

Вопрос:

Я пишу приложение для списка покупок с помощью Ionic, и в настоящее время я пытаюсь интегрировать информацию в MongoDB с моим приложением Ionic.

Однако, когда я запускаю ionic serve , единственное, что загружается в браузере, это Cannot GET / . Я не уверен, где я ошибся в своем коде.

При компиляции я получаю сообщение об ошибке

Тип Observable<{}> не присваивается типу Observable<object[ ]> .

Я думаю, проблема в getItems функции. Любая помощь будет очень признательна!

 getItems(): Observable<object[]> {
  return this.http.get(this.baseURL   '/api/groceries').pipe(
    map(this.extractData),
    catchError(this.handleError)
  );
}
 

Комментарии:

1. Что вернет этот вызов api? объект или массив ?

2. Потому что вы пытаетесь назначить объект в массив объектов.

Ответ №1:

Вам нужно убедиться, что тип this.extractData совпадает с типом вашей возвращаемой функции getItems(): Observable<object[]> .
это означает, что если вы получите массив объектов из этого вызова api, то вам нужно иметь их оба как : Array<{}> .

И для получения наилучших практик вы можете создать интерфейс для своего типа данных, добавив его в качестве наблюдаемого и переменного типа следующим образом:

 export interface CustomData {
        COUNT: number;
        NAME: string;
}
 

Ваша переменная как :
public extractData: CustomData;

И ваша функция возвращает как:
getItems(): Observable<CustomData> {

И если вы не хотите ничего из этого делать, вы можете просто изменить тип своей функции any примерно так: getItems(): Observable<any> {