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 | |
Как и все утверждения, вы говорите компилятору доверять вам. Компилятор не будет жаловаться, даже если код на самом деле не всегда присваивает свойство.