Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про TypeScript: TypeScript, interface, runtime, type erasure, compilation

Почему interface нельзя проверить во время runtime?

Проверяет понимание различий между TypeScript и JavaScript, а именно стирания типов во время компиляции.

Короткий ответ

TypeScript — это надстройка над JavaScript, которая добавляет статическую типизацию. Однако во время компиляции TypeScript транспилируется в JavaScript, и все аннотации типов, включая интерфейсы, удаляются. JavaScript не имеет встроенной системы типов, поэтому проверить существование или структуру интерфейса во время выполнения невозможно.

Длинный ответ

Почему интерфейсы TypeScript не существуют во время выполнения?

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 не знает о его существовании.

Как проверить структуру объекта во время выполнения?

Если вам нужно проверить, соответствует ли объект определённой структуре во время выполнения, вы можете использовать:

  • Пользовательские функции-гарды (type guards) — функции, которые проверяют наличие свойств и их типы.
  • Библиотеки валидации, такие как 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

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • TypeScript

    TypeScript

Ключевые слова

#TypeScript

#interface

#runtime

#type erasure

#compilation

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию