strictNullChecks
За замовчуванням null і undefined можна призначити всім типам у TypeScript, наприклад,
let foo: number = 123;
foo = null; // Okay
foo = undefined; // OkayЦе змодельовано за тим, як багато людей пишуть JavaScript. Однак, як і всі інші речі, TypeScript дозволяє явно визначити, чому can and cannot be присвоїти значення null або undefined.
У режимі суворої перевірки null null і undefined відрізняються:
let foo = undefined;
foo = null; // NOT OkayСкажімо, у нас є інтерфейс Member:
interface Member {
name: string,
age?: number
}Не кожен Member вказує свій вік, тому age є необов'язковою властивістю, тобто значення age може бути або не бути undefined.
undefined - це корінь усього зла. Це часто призводить до помилок виконання. Легко написати код, який видаватиме Error під час виконання:
getMember()
.then(member: Member => {
const stringifyAge = member.age.toString() // не можу примінити 'toString' к undefined
})Але в режимі суворої перевірки null ця помилка буде виявлена під час компіляції:
Non-Null Assertion Operator
Новий оператор постфіксованого виразу ! може бути використаний для підтвердження того, що його операнд не є нульовим і не визначеним у контекстах, де перевірка типу не може зробити висновок про цей факт. Наприклад:
Зауважте, що це лише твердження, і, як і твердження типу ви відповідаєте за те, щоб значення не було нульовим. Ненульове твердження, по суті, означає, що ви говорите компілятору: «Я знаю, що це не нуль, тому дозвольте мені використовувати його так, ніби воно не нульове».
Definite Assignment Assertion Operator
TypeScript також скаржиться на неініціалізацію властивостей у класах, наприклад:
Ви можете використовувати твердження визначеного призначення, додане до назви властивості, щоб повідомити TypeScript, що ви ініціалізуєте його десь, крім конструктора, наприклад.
Ви також можете використовувати це твердження з простими оголошеннями змінних, наприклад:
Як і всі твердження, ви говорите компілятору довіряти вам. Компілятор не скаржиться, навіть якщо код насправді не завжди призначає властивість.
Last updated