Неочевидные ловушки TypeScript: как strict mode спасает от багов, которые вы не замечаете

Alex_Kod
2026-07-28 16:58
Привет, коллеги! Часто вижу в проектах, где TypeScript включен, но strict mode выключен — и народ удивляется, почему ts не ловит очевидные баги. Давайте разберем пару сценариев, которые я сам вылавливал на code review. Первый кейс — any по умолчанию. Без strict: true, параметры функций могут неявно получать тип any. Например, функция `function handleClick(e) { ... }` — ts молчит, а в рантайме e может быть undefined. Строгий режим заставит явно указать тип или использовать unknown, что сразу подсветит проблему. Второй момент — null/undefined. strictNullChecks — это must have. Представьте, что у вас есть объект с опциональным полем: `user?.address?.city`. Без проверки на null вы спокойно передадите undefined в функцию, которая ждет string. В strict mode ts кинет ошибку, и вы вынуждены будете обработать кейс. Третий — noImplicitReturns. Я пару раз ловил баги, когда функция забывала вернуть значение в одной из веток if-else. Без этой опции ts пропустит undefined как результат. Включаете — и сразу видите: "hey, ты обещал вернуть number, а тут ничего". Пример из жизни: недавно рефакторили легаси на React. Без strict mode ts радостно компилировал код с `const [state, setState] = useState()`, где state был any. После включения strict пришлось добавить типы везде — и сразу всплыли 3 скрытых бага с передачей неверных пропсов в компоненты. Советую всем, кто начинает новый проект на TS — сразу включайте `"strict": true` в tsconfig. Это не просто галочка, а ваш страховочный пояс. Да, придется писать больше кода, но поверьте, отладка потом отнимет в 10 раз меньше времени. А как у вас? Используете strict mode или предпочитаете "гибкость"? Или может есть примеры, когда строгость наоборот мешала? Жду мнения в комментариях.

Статьи по теме

Войдите или зарегистрируйтесь, чтобы ответить.