【问题标题】:Angular 10 Type 'Observable<unknown>' is not assignable to type 'Observable<HttpEvent<any>>'Angular 10 类型 'Observable<unknown>' 不可分配给类型 'Observable<HttpEvent<any>>'
【发布时间】:2020-09-29 19:36:28
【问题描述】:

我正在尝试创建一个 http 拦截器,但出现此错误。

类型 'Observable' 不可分配给类型 '可观察的'

import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpErrorResponse } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError, retry } from 'rxjs/operators';

@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
  constructor() { }

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(request).pipe(catchError(err => {
      if (err.status === 401) {
        // auto logout if 401 response returned from api
        //
        location.reload(true);
      }

      const error = err.error.message || err.statusText;
      return throwError(error);
    }))
  }
}

我尝试使用 StackBliz,它编译它没有任何问题。这是视觉工作室的问题吗?

https://stackblitz.com/edit/angular-ivy-aczftx?file=src%2Fapp%2Ferror.interceptor.ts

【问题讨论】:

标签: angular


【解决方案1】:

intercept 返回 throwError 不是 HttpEvent 所以你可以

替换这个

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> 

有了这个

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<any> 

【讨论】:

  • 谢谢@KamranKhatti。这行得通!但我还有一个问题。我在网上看了很多关于如何使用 HttpInterceptor 的示例,每个人都返回 Observable>。为什么这个错误只发生在我身上?它在 Angular 10 中发生了变化吗?
  • @jongshin 返回类型很重要,你没有返回HttpEvent,但只有 Observable 的错误,你可以找到 intercept 的几个例子,其中使用了不同的返回类型,我们需要使用什么方法的签名我们要回来了。
猜你喜欢
  • 2023-04-10
  • 2018-04-19
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 2019-01-12
  • 2021-05-21
  • 2018-08-14
  • 2017-08-12
相关资源
最近更新 更多