1. TypeScript не гарантирует надёжность TypeScript часто подают как инструмент «защиты от ошибок». Но это не защита. Это компилятор, который верит тебе на слово.
Он проверяет типы только в пределах того, что ты сам описал.
Он не валидирует входные данные. Не ловит runtime-ошибки. Не гарантирует корректность логики.
Надежность типизации ограничена: • если API возвращает не то — компилятор не узнает; • если ты неверно понял схему — типы будут ложными; • если прилетели некорректные данные — баг всё равно произойдёт; • если хочешь обойти систему — as unknown as, @ts-expect-error, any и поехали.
TypeScript не мешает ошибаться — он просто делает это чище.
Пример: `//Описал тип type User = { id: string, email: string }
//Ответ пришел // { "id": 42, "email": null }
// Используешь тип const user = response as User
// И компилятор тебе поверит. // До первого user.email.toLowerCase()
Если не валидировать вход — получаешь баг на ровном месте.
А дальше выбор: • тянуть рантайм-библиотеку (zod, io-ts); • писать собственный инструмент для проверки; • или руками валидировать каждый объект.
Возникает вопрос: какой ценой мы получаем мнимое ощущение безопасности при возможном несоответствии типов? TypeScript — это не про надежность и «безопасность». Это про удобство разработки внутри доверенного кода.
Без валидации на границах системы типы ничего не гарантируют. В системе безопасность начинается с входных данных. Типы — уже потом.`