Объясни, будет ли TypeScript строгой проверкой типизации: от чего это зависит и почему.
Основы TypeScript
Насколько строго TypeScript проверяет код, зависит от настроек компилятора и от того, как написан код.
Настройки
"strict": true включает набор важных проверок:
strictNullChecks—nullиundefinedнужно обрабатывать явно;noImplicitAny— нельзя оставить параметр без типа;strictFunctionTypes,strictPropertyInitializationи другие.
Дополнительно полезны noUncheckedIndexedAccess (элемент массива может быть undefined) и exactOptionalPropertyTypes.
Что обходит проверки даже при strict
anyиas— компилятор верит на слово;!— «здесь не null»;- неточные типы сторонних библиотек;
- данные из внешнего мира (API,
JSON.parse) — в рантайме типов нет.
const user = (await res.json()) as User; // TS не проверит реальный ответИтог
Даже со strict TypeScript не даёт абсолютных гарантий: он проверяет согласованность кода, а не реальные данные. Поэтому внешние данные валидируют (zod).
Коротко для собеседования
Строгость зависит от strict и других флагов и от дисциплины кода; any, as и внешние данные обходят проверки, поэтому на границах нужна валидация.
Подробнее: TypeScript — strict