Тип '{}' нельзя присвоить типу 'HttpEvent <any>' - PullRequest
0 голосов
/ 09 мая 2020

У меня есть ошибка, которую я не могу найти, как ее решить, у меня есть перехватчик, и в нем он получает состояние, когда срок действия токена истек, и я перехожу к обновлению sh токена, проблема в том, когда я поднимаю Angular project указывает на ошибку в консоли, в строке (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);
                        }
                    }));

1 Ответ

1 голос
/ 09 мая 2020

Кажется, проблема в типе возврата методов handle400Error или handle403Error. Согласно catchError docs:

Улавливает ошибки на наблюдаемом для обработки путем возврата нового наблюдаемого или выдачи ошибки.

@ 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.

...