在严格模式下,我应该在我的拦截器上的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;或您可能要使用的任何类型。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...