Я использую TSLint , чтобы связать мой код Angular TypeScript.Я включил правило no-unsafe-any
, так как мне кажется хорошим правилом никогда не предполагать ничего о свойствах типа any
.
Проблема в том, что правило сообщает об ошибках на некоторыхмой код, который я не могу исправить каким-либо образом, кроме отключения правила.Пример кода, который является недопустимым в соответствии с этим правилом, приведенным ниже.
public intercept(request: HttpRequest<{}>, next: HttpHandler): Observable<HttpEvent<{}>> {
return next
.handle(request)
.pipe(
catchError(error => {
if (error && error.status === httpCodeUnauthorized) {
// Auto logout if unathorized
this.authenticationService.logout();
}
const errorMessage = (error.error && error.error.message) || error.statusText;
return throwError(errorMessage);
}),
);
}
Linter сообщает о 4 ошибках в 2 строки:
ERROR: /home/robert/programming/npc/gui/src/app/core/authentication/unauthorized.interceptor.ts[24, 24]: Unsafe use of expression of type 'any'.
ERROR: /home/robert/programming/npc/gui/src/app/core/authentication/unauthorized.interceptor.ts[29, 33]: Unsafe use of expression of type 'any'.
ERROR: /home/robert/programming/npc/gui/src/app/core/authentication/unauthorized.interceptor.ts[29, 48]: Unsafe use of expression of type 'any'.
ERROR: /home/robert/programming/npc/gui/src/app/core/authentication/unauthorized.interceptor.ts[29, 72]: Unsafe use of expression of type 'any'
2 проблемных строки:
if (error && error.status === httpCodeUnauthorized) {
const errorMessage = (error.error && error.error.message) || error.statusText;
Корень проблемы в том, что error
аргумент обработчика передан catchError
( библиотечная функция Rxjs ) имеет тип any
.Я понимаю, что error
может быть любого типа, поэтому небезопасно предполагать, что у него есть какие-либо определенные свойства, но я сначала проверяю наличие этих свойств, прежде чем ссылаться на них, что мне кажется безопасным.
Что можно / нужно сделать, чтобы убедить компилятор linter / TypeScript в безопасности и передать правило?