Type'{}'不可分配给类型'HttpEvent '

问题描述 投票:0回答:1

我有一个错误,我找不到解决方法,我有一个拦截器,并且在这种情况下,它会获得令牌过期时的状态,并且继续刷新令牌时,问题出在我提出Angular项目时,它指示控制台中的错误,在(return nex .handle(this。addToken(req))。pipe)行中,错误如下。

非常感谢您的帮助。

ERROR in src/app/auth-interceptor.ts(83,19): error TS2322: Type 'Observable<{} | HttpProgressEvent | HttpSentEvent | HttpHeaderResponse | HttpResponse<any> | 
Http...' is not assignable to type 'Observable<HttpEvent<any>>'.
Type '{} | HttpProgressEvent | HttpSentEvent | HttpHeaderResponse | HttpResponse<any> | HttpUserEvent<a...' is not assignable to type 'HttpEvent<any>'.     
Type '{}' is not assignable to type 'HttpEvent<any>'.
Type '{}' is not assignable to type 'HttpUserEvent<any>'.
        Property 'type' is missing in type '{}'.
return next.handle(this.addToken(req)).pipe(
                    catchError((error: HttpEvent<any>) => {
                        if (error instanceof HttpErrorResponse) {
                          console.log("error ",error);
                            switch ((<HttpErrorResponse>error).status) {
                              case 400:
                                return this.handle400Error(error);
                              case 403:
                                  return this.handle403Error(req, next); 
                              default:
                                  return throwError(error);
                            }
                        } else {
                            return throwError(error);
                        }
                    }));
angular typescript refresh-token
1个回答
0
投票

似乎问题出在handle400Errorhandle403Error方法的返回类型中。根据catchError文档:

通过返回新的可观察对象或引发错误来捕获要观察的对象上的错误。

@@ return {Observable}可观察到的事物,它是源自源或catch selector函数返回的可观察到的事物。

这意味着catchError的结果应该是错误,或者可以观察到HttpEvent<any>(源类型)。

例如以下代码段无类型错误:

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(req).pipe(
      catchError((error: Error) => {
        if (error instanceof HttpErrorResponse) {
          switch ((<HttpErrorResponse>error).status) {
            case 400:
              return this.handle400Error(error);
            default:
              return throwError(error);
          }
        } else {
          return throwError(error);
        }
      }));
  }

  handle400Error(error: HttpErrorResponse) {
    return of(new HttpResponse());
  }

注意:HttpEvent<any>类型与HttpErrorResponse类型无关,因此最好为Error中的错误使用catchError类型。

© www.soinside.com 2019 - 2024. All rights reserved.