Type assertions

146
10 декабря 2019, 03:00

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

Вот пример:

let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;

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

Answer 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

или

(<string>someValue).length

В этом случае компилятор верит, что эта переменная имеет строковое значение, а значит у нее можно взять свойство length.

READ ALSO
Как убрать ошибку LLVM version appears incorrect?

Как убрать ошибку LLVM version appears incorrect?

Я установил на Ubuntu emscripten Проверку модулей установленных проходит

180
Сетчатый прайс в sql

Сетчатый прайс в sql

Решил вернуть тему, дабы поползав в парсинге эксель через php понял, что не вариантВопрос такой, как создать таблицу mysql для получения стоимости...

188
Какой первичный ключ лучше? id +user_id vs id

Какой первичный ключ лучше? id +user_id vs id

Есть 2 таблицыТаблица юзеров (user) и таблица их целей(goal_data)

151