类型“ {}”不可分配给类型“ HttpEvent <any>”

时间:2020-05-08 21:55:31

标签: angular typescript refresh-token

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

谢谢您的帮助。

sudo npm install -g @aws-amplify/cli --unsafe-perm=true
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 '{}'.

1 个答案:

答案 0 :(得分:1)

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

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

@return {Observable}一个可观察值,它是源自源或catch catchError函数返回的可观察值。

这意味着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中的错误。