Почему машинопись требует, чтобы я обошел установку значения типа boolean? - PullRequest
0 голосов
/ 10 октября 2018
function f1()
{
    const v : string = String();

    if(v) {alert("IF");} // OK

    const b : boolean = v; // Type 'string' is not assignable to type 'boolean'.

    if(b) {alert("BOOLEAN");}
}

f1();

Теперь мое решение этой проблемы - двойной восклицательный знак, но я чувствую неприятности или ошибаюсь:

    const b : boolean = !!v; //OK

Я использую это как base .

1 Ответ

0 голосов
/ 10 октября 2018

Это решение по безопасности типа.Вы можете использовать любой тип в if (или в других местах, где ожидаются условия, например while или ?:), так как это работает в JS и является обычной практикой.

Если вы объявляете переменную явно типа boolean, это означает, что вы хотите ограничить возможные значения true или falseundefined и null, если вы не используетеstrictNullChecks).Поскольку Typescript не выполняет преобразований во время выполнения, если бы ваше назначение было разрешено, b будет содержать string.Конечно, он будет работать так же, если используется в условных выражениях, но, например, === может дать неожиданные результаты.

Преобразование типа любого значения в boolean с использованием двойного отрицания (!!) распространено в JS, и его можно использовать.

...