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

Какие плюсы и минусы написания всего на interface в TypeScript?

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

Писать всё на interface удобно для объектов, но не для всех видов типов.

Плюсы

  • Понятные ошибки при расширении — конфликт полей виден сразу.
  • Слияние объявлений — можно дополнять типы, в том числе чужие.
  • Производительность компилятора — интерфейсы лучше кешируются на больших проектах.
  • Единый стиль для объектов, props и публичного API.

Минусы

  • Нельзя описать объединения ('a' | 'b'), кортежи, вычисляемые типы — всё равно понадобится type.
  • Случайное слияние — два интерфейса с одинаковым именем в глобальной области незаметно объединятся.
  • Неявная расширяемость — интерфейс могут дополнить в другом месте, что иногда нежелательно.
  • Нет «закрытых» типов — для дискриминированных объединений нужен type.
interface Cat { kind: 'cat'; meow(): void }
interface Dog { kind: 'dog'; bark(): void }
type Pet = Cat | Dog; // объединение — только через type

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

Плюсы — понятные ошибки, слияние и производительность; минус — объединения, кортежи и вычисляемые типы всё равно требуют type, а слияние может быть неожиданным.

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

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