Почему tslint помечает свойства строго типизированных параметров как any, если включена опция no-unsafe-any - PullRequest
0 голосов
/ 25 января 2019

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

Сообщение об ошибке:

Небезопасное использование выражения типа 'any'.

Пример компонента:

@Component({..)}
export class SampleComponent {
  private localString: string;
  constructor(private injectedService: SampleService) {
    this.localString= this.injectedService.stringProperty;
  }
}

И пример сервиса:

@Injectable({providedIn: 'root'})
export class SampleService {
  public stringProperty: string;
}

Примечание. Если фон имеет какое-либо применение, это следует из этого вопроса: Typescript не обеспечивает или не проверяет тип возвращаемого значения

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

В моем случае мне просто нужно было привести часть выражения к числу

this.refundNegative = requestedAmount.value < 0;

, ставшему

this.refundNegative = requestedAmount.value as number < 0;

, и моя проблема с линтингом была решена.

0 голосов
/ 25 января 2019

Проблема, вероятно, в том, что многие угловые декораторы не имеют реальных возвращаемых типов, они возвращают any. Правила tslint правильно идентифицируют, что мы пытаемся присвоить любое место, где ожидается декоратор.

Одним из решений является увеличение типов декораторов. Я активировал правило в одном из моих проектов, и эти дополнения осчастливили линтера, вам может понадобиться добавить других при необходимости:

import { Type } from '@angular/core/src/type';
declare module '@angular/core/src/metadata/directives' {
    export interface InputDecorator {
        // tslint:disable-next-line:callable-types
        (bindingPropertyName?: string): PropertyDecorator;
    }
}
declare module '@angular/core/src/di/injectable' {

    export interface InjectableDecorator {
        (): ClassDecorator;
        // tslint:disable-next-line:unified-signatures
        (options?: {
            providedIn: Type<any> | 'root' | null;
        } & InjectableProvider): ClassDecorator;
    }
}
...