Вопрос проверяет понимание того, какие ограничения и подводные камни появляются при компиляции TypeScript в JavaScript, и зачем это важно учитывать в реальных проектах.
TypeScript — это надстройка над JavaScript, и браузеры или Node.js не умеют исполнять его напрямую. Поэтому код сначала компилируется (транспилируется) в обычный JavaScript. Главная особенность этого процесса — стирание типов: все аннотации типов, интерфейсы, generics и модификаторы доступа исчезают в итоговом файле. Это порождает целый класс проблем, которые важно понимать.
interface User {
name: string;
age: number;
}
function greet(user: User) {
// Компилятор уверен, что user.name — строка
return user.name.toUpperCase();
}
// Данные из API на самом деле не соответствуют типу
const data = JSON.parse('{"name": 42}') as User;
greet(data); // TypeError: user.name.toUpperCase is not a function
Компилятор не увидит проблему, потому что мы сами сказали ему «это User». В рантайме же типов нет, и вызов метода у числа приведёт к ошибке.
Итог: TypeScript даёт мощную проверку на этапе разработки, но после компиляции остаётся обычный JavaScript без типов. Поэтому критичные данные нужно валидировать в рантайме, а конфигурацию компилятора настраивать осознанно.