问题描述
我一直在使用"no-any"
tslint规则的 Angular 10 上的严格模式。
我已经修复了我应用程序中的几乎所有内容,使其不包含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);
})
);
}
}
解决方法
我通常会坚持使用unknown
。
另一个(也许更漂亮)的解决方案可能是定义特殊的联合类型或公共接口。
export type ManyTypes = Type1 | Type2 | Type3;
或您可能要使用的任何类型。