type против interface
Вопрос
Чем type отличается от interface и что выбирать?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
interface можно расширять повторным объявлением - declaration merging
type умеет объединения, пересечения, условные и mapped-типы
interface только для объектных форм
оба поддерживают extends и реализуются классами
разница в производительности компилятора незначительна
практика: interface для публичных контрактов, type для всего остального
Что могут спросить следом
- Что такое declaration merging и где он нужен
- Как сделать объединение через interface
- Что выбрать для пропсов компонента
Разбор
interface описывает объектную форму и умеет слияние деклараций: два объявления
с одним именем складываются. Это нужно для расширения чужих типов (declare module)
и потому удобно в публичных API библиотек.
type - псевдоним для любого типа: объединения, пересечения, кортежи, условные
и mapped-типы, infer. Всё, что не просто объектная форма, пишется через type.
На практике команды выбирают одно правило и следуют ему. Распространённое: interface
для контрактов, которые кто-то может расширять, type для всего остального. Спорить
об этом на ревью - потеря времени, это вопрос соглашения.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.