TypeScript: восклицательный знак
В этой статье мы рассмотрим одну из интересных особенностей TypeScript — восклицательный знак. Он используется для работы с типами и предоставляет разработчику возможность указать, что значение переменной гарантированно не будет равно null или undefined .
Синтаксис
Восклицательный знак ставится после имени переменной и перед точкой, когда мы обращаемся к свойствам объекта:
Зачем это нужно?
TypeScript стремится предоставить безопасность типов, чтобы избегать ошибок, связанных с неправильным использованием переменных. Однако иногда разработчики уверены, что значение переменной будет определено, даже если тип может быть null или undefined .
В таких случаях восклицательный знак позволяет указать компилятору, что значение переменной гарантированно определено, и ошибки не возникнет. Это позволяет избежать ненужных проверок на null и undefined .
Пример использования
В примере выше, мы создали интерфейс User с опциональным полем email . В функции getEmail мы используем восклицательный знак, чтобы указать, что значение email точно будет определено.
Важное замечание
Несмотря на удобство использования восклицательного знака, стоит быть осторожным и использовать его только в тех случаях, когда вы абсолютно уверены, что значение переменной гарантированно определено. В противном случае, вы рискуете получить ошибки во время выполнения программы, которые сложнее найти и исправить, чем ошибки компиляции.
Альтернативы восклицательному знаку
Если вы не уверены в том, что значение переменной гарантированно определено, рассмотрите использование других подходов, предоставляемых TypeScript для работы с возможными null или undefined значениями.
Оператор объединения с null (??)
Оператор объединения с null позволяет задать значение по умолчанию, которое будет использовано, если значение переменной равно null или undefined :
Оператор опциональной цепочки (?.)
Оператор опциональной цепочки позволяет безопасно обращаться к свойствам объекта, которые могут быть null или undefined , вернув значение undefined , если это происходит:
Заключение
Восклицательный знак в TypeScript — это удобный инструмент, который позволяет разработчикам явно указать, что значение переменной гарантированно определено. Однако, стоит использовать его с осторожностью, чтобы избежать ошибок во время выполнения программы. Рассмотрите использование альтернативных подходов, если вы не уверены в определенности значения переменной.
Зачем нужен восклицательный знак при объявлении переменной TS?
тк он явно не является частью названия переменной, также не думаю, что он говорит о том, что переменная не может быть равна null | undefined:
- Вопрос задан более года назад
- 2123 просмотра
Простой 1 комментарий
- Вконтакте

Моя реакция когда я вижу всё это новомодное дерьмо: 
Что означает два восклицательных знака "!!" перед выражением?
Что означает, когда пишут два восклицательных знака перед переменной или любым другим выражением? Например:
- приведение типов
- JavaScript

Прежде всего давайте вспомним что вообще делает восклицательный знак в обычных ситуациях. Он является логическим оператором "не". Простой пример, проверяем что выражения между собой равны:
Если хотим проверить что они не равны, то добавляем восклицательный знак:
То есть мы "перевернули" (инвертировали) проверку. Примерно то же самое происходит, когда мы добавляем восклицательный знак перед любым выражением:
Обратите внимание, перед myVar стоит восклицательный знак, это отрицание, то есть можно прочитать это как "не myVar". Восклицательный знак инвертирует наше выражение, которое является строкой 'test'. Но тут возникает вопрос: а что является не строкой 'test'? Если подойти к вопросу философски, то можно найти бесконечное множество вещей, которые являются не строкой 'test'. Но у интерпретатора JS на этот счёт есть чёткое правило: он вычисляет выражение справа от восклицательного знака так, чтобы получить либо true , либо false , то есть приводит к булевому типу. Строка 'test' приводится к булевому типу и вычисляется как true , а восклицательный знак инвертирует, то есть переворачивает true на false , так как false является противоположностью true .
Теперь гораздо легче понять что делают два восклицательных знака:
Интерпретатор пытается вычислить сначала !content . Если content будет ложным выражением, то вычислится true , если истинным, то false . А второй восклицательный знак переворачивает true на false , а false на true . В итоге, если контент существует, то функция вернёт true , а если не существует, то false .
Теперь возникает вопрос: зачем вообще это нужно? Это делается чтобы мы всегда работали с определённым типом. Такой хитрый способ позволяет нам добиться чтобы функция всегда возвращала булевый тип. Любое значение будет преобразовываться в этот булевый тип. Это называется приведение типов.