strictNullChecks¶
По умолчанию null
и undefined
можно назначать всем типам в TypeScript, например:
1 2 3 |
|
Это спроектировано по образцу того, как многие люди пишут JavaScript. Однако, как и в других случаях, TypeScript позволяет вам явно указать, чему можно, а чему нельзя присвоить null
или undefined
.
В режиме strictNullChecks
, значения null
и undefined
различаются:
1 2 |
|
Допустим, у нас есть интерфейс Member
:
1 2 3 4 |
|
Не каждый Участник
предоставит свой возраст, поэтому возраст
является необязательным свойством, то есть значение age
может быть или не быть undefined
.
undefined
- корень всех зол. Это часто приводит к ошибкам во время выполнения. Легко написать код, который будет выдавать Error
во время выполнения:
1 2 3 4 5 |
|
Но в режиме strictNullChecks
эта ошибка будет обнаружена во время компиляции:
1 2 3 4 |
|
Оператор утверждения не-null¶
Новый постфиксный оператор !
может использоваться для утверждения, что его операнд не равен null и не-undefined в случаях, где средство проверки типов не может сделать логический вывод об этом. Например:
1 2 3 4 5 6 7 8 9 10 |
|
Обратите внимание, что это просто утверждение, и, как при утверждении типа, вы сами несете ответственность за то, чтобы значение не было null. Не-null утверждение, по сути, означает, что вы говорите компилятору: "Я знаю, что оно не null, поэтому позволь мне использовать его, как если бы оно не было null".
Оператор утверждения окончательного присваивания¶
TypeScript также будет жаловаться на свойства в классах, которые не инициализированы, например:
1 2 3 4 5 6 7 8 9 |
|
Вы можете использовать утверждение окончательного присваивания с постфиксом к имени свойства, чтобы сообщить TypeScript, что вы инициализируете его где-нибудь, кроме конструктора, например:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Вы также можете использовать это утверждение с простыми объявлениями переменных, например:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Как и все утверждения, вы говорите компилятору доверять вам. Компилятор не будет жаловаться, даже если код на самом деле не всегда присваивает свойство.