🧱 Суть
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 / Intersection | ✅ type |
| Tuple | ✅ type |
Расширение через extends | ✅ interface |
Реализация в классе (implements) | ✅ interface |
🎯 Вывод
interfaceлучше подходит для описания формы объектаtypeудобнее для алиасов и сложных комбинаций типов- в простых случаях функциональной разницы почти нет
- главное – придерживаться единого стиля в проекте