Вы можете просто навести курсор на .pipe
, чтобы проверить его возвращаемое значение.
.tap
просто возвращает то, что получает. Но я думаю, catchError
может вернуть Object
. Вот почему этот тип возврата принимается за Observable<{}|IProduct[]>
.
Fix 1. Используйте это в этом случае.
getProducts(): Observable<{}|IProduct[]> {
return this.http.get<IProduct[]>(this.productUrl).pipe(
tap(data => console.log('All: ' + JSON.stringify(data))),
catchError(this.handleError)
);
}
В получающем компоненте вы можете сделать это:
products => { this.products = products as IProduct[] };
Исправление 2. Если вы не хотите изменять тип возвращаемого значения, а затем исправлять код, в котором вы подписались на это наблюдаемое, просто избавьтесь от catchError
здесь:
getProducts(): Observable <IProduct[] > {
return this.http.get < IProduct[] > (this.productUrl).pipe(
tap(data => console.log('All: ' + JSON.stringify(data)))
);
}
Fix 3. Или просто избавиться от .pipe
в первую очередь. Вы используете .tap
для входа в любом случае. Так что это не добавляет никакой ценности вашему коду. Что касается отлова ошибки, вы можете сделать это либо в HttpInterceptor, либо в том месте, где вы будете subscribing
к тому, что возвращает этот метод.
getProducts(): Observable<IProduct[]> {
return this.http.get<IProduct[]>(this.productUrl);
}