Страницы

Поиск по вопросам

суббота, 7 марта 2020 г.

Type assertions

#typescript


Кто ни будь может на пальцах объяснить с нормальными примерами, что такое assertions
в typescript и где это применяется. В документации этому  вопросу, уделяется несколько
строк с не понятными примерами.

Вот пример:

let someValue: any = "this is a string";

let strLength: number = (someValue as string).length;


Не понятно что вообще в этом коде происходит.
    


Ответы

Ответ 1



В документации есть следующее: Type assertions – это возможность сказать компилятору "Доверься мне, я знаю что делаю". Type assertion похож на каст в других языках программирования, но не делает каких-либо специальных проверок или преобразований. Он никак не влияет на время выполнения и добавляется только для компилятора. TypeScript надеется, что ты уже сделал все проверки, которые нужны. Далее приводится пример: let someValue: any = "this is a string"; let strLength: number = (someValue as string).length; Из-за any пример возможно не очень удачен, так как для этого типа нет проверок, какие свойства у него вызываются, и можно вызвать любое свойство, и компилятор не укажет на ошибку, с другой стороны, ide не подскажет, что у someValue есть такое свойство, как length. В случае же с type assertions, автодополнение начнет работать. Более наглядным пример может стать, если заменить any, на {}. В этом случае let someValue: {} = "this is a string"; При попытке вызвать someValue.length компилятор покажет ошибку Property 'length' does not exist on type '{}' И в этом случае использование type assertions становится понятнее: мы знаем, что в данной переменной будет строка, у которой есть свойство length и подсказываем об этом компилятору: (someValue as string).length или (someValue).length В этом случае компилятор верит, что эта переменная имеет строковое значение, а значит у нее можно взять свойство length.

Комментариев нет:

Отправить комментарий