Невозможно создать приложение Angular из-за ошибки в http-перехватчике, Angular 6 - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть http-перехватчик, который отлично работает в одном приложении Angular 6, но во втором приложении, которое было только что обновлено с 5 до 6, сборка приложения вызывает следующие ошибки

ERROR in src/app/loading.interceptor.ts(32,5): 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 '{}'.
src/app/loading.interceptor.ts(45,31): error TS2558: Expected 0 type arguments, but got 1.

Перехватчиквыглядит следующим образом

import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import {
  HttpRequest,
  HttpHandler,
  HttpEvent,
  HttpInterceptor,
  HttpResponse,
  HttpErrorResponse
} from '@angular/common/http';
import { Observable } from 'rxjs';
import { of } from 'rxjs/observable/of';
import { LoaderService } from './loader.service';
import { tap } from 'rxjs/operators';

@Injectable()
export class LoadingInterceptor implements HttpInterceptor {
  constructor(
    private loadingService: LoaderService,
    private router: Router
  ) {}

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    this.loadingService.startLoading();
    return next.handle(request).pipe(
      tap(event => {
        if (event instanceof HttpResponse) {
          this.loadingService.stopLoading();
        }
      }, response => {
        this.loadingService.stopLoading();

        if (response instanceof HttpErrorResponse) {
          this.router.navigateByUrl('/not-found');
        }

        return of<HttpEvent<any>>();
      }));
  }
}

1 Ответ

0 голосов
/ 20 февраля 2019

Я думаю, что проблема с возвращаемым значением функции, которое должно быть Observable<HttpEvent<any>>.Простым решением было бы приведение к любому

return <any> of<HttpEvent<any>>();

Существует также другая проблема src/app/loading.interceptor.ts(45,31) Я попытался скопировать ваш код и вставить в фрагмент slackblitz , нопосле форматирования кода я обнаружил, что ваш код заканчивается только строкой 39 , поэтому посмотрите в вашем редакторе файл перехватчика и проверьте функцию в строке 45 эта функция принимает нулевые аргументыно вы передали один аргумент

...