Какие типы я должен предоставить для HttpRequest в моем перехватчике на angular 10 в строгом режиме

#angular #httprequest #angular-http-interceptors

#angular #httprequest #angular-http-interceptors

Вопрос:

Я работал над строгим режимом на Angular 10, который поставляется с "no-any" правилом tslint. Я исправил почти все в своем приложении, чтобы оно не содержало any тип, но я не знаю, какие типы я могу предоставить в своем перехватчике для HttpRequest и HttpEvent .

Я предполагаю, что может быть довольно много типов, я искал примеры этого в Интернете, но в основном это старые примеры, которые используют any .

Например: у меня много post запросов, все они передают разные объекты в теле на сервер. Я понимаю, что <T> (любой) в HttpRequest представляет тело. Должен ли я создать type variable со всеми заданными объектами? Это кажется беспорядочным.

 import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { AuthService } from '../services/auth.service';
import { catchError } from 'rxjs/operators';

@Injectable()
export class JwtInterceptor implements HttpInterceptor {
  constructor(private authService: AuthService) { }

  intercept(
    request: HttpRequest<any>,
    next: HttpHandler
  ): Observable<HttpEvent<any>> {
    const token = this.authService.getToken();
    request = request.clone({
      setHeaders: {
        Authorization: `Bearer ${token}`,
      },
    });
    return next.handle(request).pipe(
      catchError((err) => {
        if (err.status !== 200) {
          this.authService.logout();
        }
        return throwError(err);
      })
    );
  }
}
  

Ответ №1:

Я обычно придерживаюсь unknown .

Другим (и, возможно, более красивым) решением может быть определение специального типа объединения или общего интерфейса.

export type ManyTypes = Type1 | Type2 | Type3; или любые типы, которые вы, возможно, захотите использовать.