Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

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

Можно ли расширять interface и type, и в чём разница?

Вопрос проверяет глубокое понимание системы типов TypeScript и различий в расширяемости interface и type.

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

interface можно расширять с помощью extends и declaration merging. type расширяется через пересечения (&). interface лучше подходит для публичных контрактов и API. type более гибок, но не поддерживает автоматическое объединение объявлений. Эти различия важны при проектировании типов.

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

В TypeScript и interface, и type можно расширять, но механизмы и последствия у них разные.

Расширение interface

interface поддерживает:

  • extends

  • declaration merging

interface User {
  id: number
}

interface User {
  name: string
}

В результате User будет содержать оба поля.

Преимущества:

  • удобно расширять контракты

  • подходит для библиотек

  • хорошо масштабируется

Расширение type

type расширяется через intersection types:

type User = {
  id: number
}

type ExtendedUser = User & {
  name: string
}

Особенности:

  • нет declaration merging

  • более явная композиция

  • лучше для сложных типов

Ключевые различия

  • interface можно объявлять несколько раз

  • type — нет

  • type поддерживает union (|)

  • interface — нет

Практический выбор

  • публичные контракты → interface

  • композиция типов → type

Вывод:
interface лучше для расширяемых контрактов, type — для сложной типовой логики и композиции.

Уровень

  • Рейтинг:

    5

  • Сложность:

    8

Навыки

  • TypeScript

    TypeScript

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

#interface

#type

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