Машинопись: Введите утверждение как любое, что это значит? - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь понять, как работает раздел кода. Я уже видел утверждение типа, но по какой-то причине я не могу обернуть голову вокруг этого.

(this.whatever as any).something([]);

Большая часть кода:

    resetThis(): void {
    if (this.whatever) {
        (this.whatever as any).something([]);
    }
}

При попытке запустить этот блок я получаю сообщение об ошибке: this.whatever.someting is not a function

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Допустим, this.whatever имеет тип IMyType.

С:

IMyType {
  prop1: string;
  prop2: string;
}

поэтому, если вы позвоните this.whatever.something([]), компилятор закричит. Поскольку функция something([]) не определена в IMyType.

Использование as any сообщит компилятору, что для этого конкретного оператора он должен считать this.whatever типа any. Это означает, что он может иметь любое свойство или метод, который он хочет.

0 голосов
/ 10 мая 2018

Ваш код эквивалентен этому простому коду JavaScript:

this.whatever.something([]);

Когда вы говорите as any в TypeScript, вы говорите компилятору игнорировать предыдущий тип предыдущего выражения и вместо этого обрабатывать его, как если бы он был типа any. Итак, в вашем случае вы говорите компилятору, что this.whatever имеет тип any.

Тип any в TypeScript - это, по сути, тип, который означает, что «мы ничего не знаем о том, что на самом деле является этой переменной, поэтому позвольте мне делать с ней все, что я захочу». Руководство TypeScript описывает это как «отказ от проверки типов» .

...