TypeScript strict mode: почему 90% проектов его не включают

Включил strict mode в TypeScript на проекте с 200+ файлами. Через час получил 847 ошибок. Через неделю — ноль багов в проде. Вот что я понял

Что такое strict mode? Это набор из ~10 флагов в tsconfig.json, которые заставляют компилятор проверять код жёстче. strictNullChecks, noImplicitAny, strictFunctionTypes и другие. По умолчанию они выключены.

Причина 1: «У нас legacy, включим потом» Классика. Проект стартовал без strict, накопилось 100K строк. Правда: чем дольше ждёшь, тем больнее. Мы включали поэтапно — по одному флагу за спринт.

Причина 2: «Это замедляет разработку» Strict mode не замедляет — он перемещает ошибки из рантайма в компиляцию. Лучше красная линия в IDE, чем алерт в 3 ночи.

Причина 3: «Наши типы и так хорошие» Нет. any в коде — это отключённый ремень безопасности.

Что реально даёт strict mode: • strictNullChecks — ловит 60% null/undefined багов • noImplicitAny — код становится документацией • strictFunctionTypes — находит баги в callback-ах • noUncheckedIndexedAccess — массив может быть пустым

Как мы включали на 200+ файлах: 1. Включили strict, добавили @ts-expect-error на все 847 ошибок 2. Каждый спринт убирали 50-100 ошибок 3. Через 2 месяца — ноль ошибок, ноль null-багов в проде 4. AI-агент помогал с миграцией — показываешь файл, он исправляет типы

Результат: 3-5 null-инцидентов/мес → ноль за 4 месяца.

У вас strict mode включён? Что мешает?