PassFront
  1. PassFront
  2. База знаний
  3. Типы и интерфейсы

Дублируют ли друг друга type и interface в TypeScript?

Типы и интерфейсы

Частично да: для описания объектов type и interface взаимозаменяемы. Но у каждого есть то, чего нет у другого.

Где пересекаются

interface A { x: number }
type B = { x: number };

Оба подходят для объектов, функций, implements в классах, расширения (extends у интерфейса, & у типа).

Чем отличаются

  • Только `type`: объединения, кортежи, вычисляемые типы (keyof, mapped, условные, шаблонные строки).
  • Только `interface`: слияние объявлений — два интерфейса с одним именем объединяются; так расширяют типы библиотек и глобальные объекты.
  • Ошибки: конфликт полей при interface extends — сразу ошибка, при type & — молчаливый never в поле.
  • Производительность компиляции — на огромных типах интерфейсы кешируются лучше.

Практика

В команде договариваются о правиле, например: interface для объектов и публичного API, type — для всего остального.

Коротко для собеседования

Для объектов они почти дублируют друг друга, но type нужен для объединений и вычисляемых типов, а interface — для слияния объявлений и расширения чужих типов.

Подробнее: TypeScript Handbook — Type Aliases vs Interfaces

Другие вопросы раздела