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 — это не про надежность и «безопасность». Это про удобство разработки внутри доверенного кода.

Без валидации на границах системы типы ничего не гарантируют. В системе безопасность начинается с входных данных. Типы — уже потом.`