在严格模式下,我应该在我的拦截器上的angular 10上为HttpRequest提供什么类型

问题描述

我一直在使用"no-any" tslint规则的 Angular 10 上的严格模式。 我已经修复了我应用程序中的几乎所有内容,使其不包含any类型,但是我不知道我可以在拦截器中为HttpRequestHttpEvent提供哪些类型。>

我认为可能有很多类型,我一直在网上寻找这种类型的例子,但它们大多是使用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);
      })
    );
  }
}

解决方法

我通常会坚持使用unknown

另一个(也许更漂亮)的解决方案可能是定义特殊的联合类型或公共接口。

export type ManyTypes = Type1 | Type2 | Type3;或您可能要使用的任何类型。