Что такое strictNullChecks

Ответ

StrictNullChecks — это опция компилятора TypeScript, которая включает строгую проверку типов для null и undefined. Без неё TypeScript позволяет неявно присваивать эти значения любому типу, что может привести к ошибкам во время выполнения.

Пример:

// Без strictNullChecks
let name: string = null; // Ошибки нет

// С strictNullChecks
let name: string = null; // Ошибка: Type 'null' is not assignable to type 'string'

Чтобы явно разрешить null или undefined, нужно использовать union-типы:

let name: string | null = null; // Корректно

Преимущества:

  • Более безопасный код
  • Чёткое указание, где могут быть null/undefined
  • Лучшая поддержка опциональных полей (?)

Ответ 18+ 🔞

А, ну вот это, блядь, интересная тема подъехала! StrictNullChecks, сука! Это такая штука в TypeScript, которая тебе мозги прочищает, как будто тебе в голову заглянули и сказали: "Слушай, дружок, а ты уверен, что тут не null завалился, а?"

Без этой опции TypeScript ведёт себя, как распиздяй последний. Ну то есть, ты пишешь:

// Без strictNullChecks
let name: string = null; // Ошибки нет

И он тебе: "Да похуй, братан, пиши что хочешь, null строке? Да не вопрос, хули там". А потом в рантайме у тебя всё ебётся, и ты сидишь и думаешь: "Ну откуда, сука, undefined вылез, я же объявил строку!". А вылез потому, что компилятор тебя, как лоха, пропустил.

А вот когда ты эту опцию включаешь — ёпта, тут начинается цирк с конями. Тот же самый код:

// С strictNullChecks
let name: string = null; // Ошибка: Type 'null' is not assignable to type 'string'

И компилятор тебе такой: "Э, сабака, сука! Ты куда это? Ты же сказал, что тут будет string, а суёшь null! Иди нахуй, исправляй!". И он прав, блядь!

Чтобы его успокоить, надо честно признаться: "Да, чувак, тут может быть или строка, или null, я не уверен". И пишешь union-тип:

let name: string | null = null; // Корректно

Вот теперь он доволен. "Ага, — говорит, — ну теперь ясно, бывает. Ну окей, проходи".

И преимущества-то какие, блядь, очевидные!

  • Код становится безопаснее, как будто в бронежилете ходишь. Меньше шансов, что в продакшене всё накроется медным тазом из-за какого-нибудь неожиданного undefined.
  • Ты прямо в коде пишешь, где эта хитрая жопа в виде null может вылезти. Прозрачнее некуда.
  • И опциональные поля (эти, с вопросительным знаком ?) начинают работать как надо, а не просто для галочки.

Короче, включать обязательно. Иначе потом сидишь и ебёшь мозг, откуда ошибка. А всё потому, что пожалел одну строчку в конфиге. Не будь мудаком, включай strictNullChecks!