🧱 Суть

interface и type во многом похожи, но имеют разное назначение.

Общее правило:

  • interface – для описания структуры объекта
  • type – для создания алиасов и составных типов

📦 Проблема

1. Непонятно, что выбрать

Для простых объектов подходят оба варианта, поэтому начинающие часто теряются.

2. Смешиваются разные задачи

type начинают использовать везде, хотя иногда interface читается лучше.

✅ Решение

Выбирать инструмент по назначению, а не по привычке.

💻 Код

Когда использовать interface

Для описания структуры объекта:

interface CalculatorButton {
  label: string;
  colSpan?: number;
}

Подходит для:

  • props
  • моделей
  • конфигов
  • store
  • объектов с фиксированной структурой

Также удобно, если тип нужно расширять:

interface AdminUser extends User {}

Или реализовывать в классах:

class UserService implements Service {}

Когда использовать type

Для создания алиасов и составных типов:

type Id = string | number;

Объединение и пересечение типов:

type User = BaseUser & AdminRights;

Tuple:

type Buttons = [string, string];

Сравнение

СитуацияЧто выбрать
Простая структура объектаinterface
Алиас типаtype
Union / Intersectiontype
Tupletype
Расширение через extendsinterface
Реализация в классе (implements)interface

🎯 Вывод

  • interface лучше подходит для описания формы объекта
  • type удобнее для алиасов и сложных комбинаций типов
  • в простых случаях функциональной разницы почти нет
  • главное – придерживаться единого стиля в проекте

🔗 Связано