Ответ вслух Junior Базовые типы обновлено

type против interface

Вопрос

Чем type отличается от interface и что выбирать?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

interface описывает объектную форму и умеет слияние деклараций: два объявления с одним именем складываются. Это нужно для расширения чужих типов (declare module) и потому удобно в публичных API библиотек. type - псевдоним для любого типа: объединения, пересечения, кортежи, условные и mapped-типы, infer.

Что должно прозвучать в ответе

  • interface можно расширять повторным объявлением - declaration merging

  • type умеет объединения, пересечения, условные и mapped-типы

  • interface только для объектных форм

  • оба поддерживают extends и реализуются классами

  • разница в производительности компилятора незначительна

  • практика: interface для публичных контрактов, type для всего остального

Что могут спросить следом

  • Что такое declaration merging и где он нужен
  • Как сделать объединение через interface
  • Что выбрать для пропсов компонента

Разбор

interface описывает объектную форму и умеет слияние деклараций: два объявления с одним именем складываются. Это нужно для расширения чужих типов (declare module) и потому удобно в публичных API библиотек.

type - псевдоним для любого типа: объединения, пересечения, кортежи, условные и mapped-типы, infer. Всё, что не просто объектная форма, пишется через type.

На практике команды выбирают одно правило и следуют ему. Распространённое: interface для контрактов, которые кто-то может расширять, type для всего остального. Спорить об этом на ревью - потеря времени, это вопрос соглашения.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.