Проверяет понимание различий между TypeScript и JavaScript, а именно стирания типов во время компиляции.
TypeScript — это статически типизированный язык, который компилируется в JavaScript. Во время компиляции TypeScript удаляет все аннотации типов, включая интерфейсы, в процессе, называемом стиранием типов (type erasure). JavaScript, в который компилируется TypeScript, является динамически типизированным языком и не имеет встроенной поддержки для проверки типов во время выполнения.
Рассмотрим простой интерфейс и функцию:
interface User {
name: string;
age: number;
}
function greet(user: User) {
console.log(`Hello, ${user.name}!`);
}После компиляции в JavaScript код будет выглядеть так:
function greet(user) {
console.log(`Hello, ${user.name}!`);
}Как видите, интерфейс User полностью исчез. JavaScript не знает о его существовании.
Если вам нужно проверить, соответствует ли объект определённой структуре во время выполнения, вы можете использовать:
zod, io-ts или yup, которые позволяют определять схемы и проверять данные во время выполнения.interface User {
name: string;
age: number;
}
function isUser(obj: any): obj is User {
return typeof obj.name === 'string' && typeof obj.age === 'number';
}
const data = { name: 'Alice', age: 30 };
if (isUser(data)) {
console.log('Data is a User');
}Этот код работает, потому что мы проверяем фактические типы свойств во время выполнения, а не полагаемся на интерфейс.
Интерфейсы TypeScript — это инструмент для разработчика, который помогает обнаруживать ошибки на этапе компиляции. Они не предназначены для проверки данных во время выполнения. Если вам нужна runtime-валидация, используйте функции-гарды или специализированные библиотеки.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию