Sobes.tech
Back to questions
Middle
5

В чём разница между interface и type в TypeScript? Зачем нужны интерфейсы если есть типы и наоборот?

Companies where asked
Evrone

Answer from AI

sobes.tech AI

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

  • interface предназначен для описания структуры объектов и может быть расширен (extends) или реализован (implements) классами. Интерфейсы поддерживают декларативное слияние (declaration merging), то есть можно объявить интерфейс с одним именем несколько раз, и TypeScript объединит их.

  • type — это более общий инструмент, который позволяет создавать алиасы для любых типов: примитивов, объединений, пересечений, кортежей и т.д. Типы нельзя расширять или реализовывать, и они не поддерживают декларативное слияние.

Зачем нужны оба?

  • Интерфейсы удобны для описания контрактов объектов и классов, особенно когда важна расширяемость и декларативное слияние.
  • Типы дают больше гибкости для сложных выражений типов, например, объединений или пересечений.

Пример:

interface IUser {
  name: string;
}

interface IUser {
  age: number; // интерфейсы сливаются
}

const user: IUser = { name: "Alice", age: 30 };

// type так не сработает
// type User = { name: string };
// type User = { age: number }; // ошибка: Duplicate identifier 'User'

// type позволяет объединения

type ID = string | number;