Sobes.tech
Back to questions
Middle
4

В чём разница между type и interface в TypeScript? Плюсы и минусы каждого?

Companies where asked
Premium IT Solution

Answer from AI

sobes.tech AI

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

interface:

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

type:

  • Более универсален, позволяет описывать не только объекты, но и объединения, пересечения, примитивы, кортежи и т.д.
  • Не поддерживает декларативное расширение (не может быть объявлен несколько раз с объединением).
  • Можно создавать сложные типы с помощью операторов |, &.

Плюсы и минусы:

Особенность interface type
Расширение Да, через extends и merging Да, через пересечения (&), но без merging
Универсальность Только объекты и классы Любые типы (примитивы, объединения, кортежи)
Декларативное объединение Да Нет

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

  • Если нужно описать структуру объекта или класс, лучше использовать interface.
  • Если нужен сложный тип (объединение, пересечение, примитивы), лучше type.
  • Для расширяемых API удобнее interface.

Пример:

interface IUser {
  name: string;
}

interface IUser {
  age: number; // интерфейсы объединятся
}

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

// type не поддерживает объединение
// type User = { name: string };
// type User = { age: number }; // ошибка

// type для объединения
type ID = string | number;