type или interface
Вопрос
Чем type отличается от interface и что вы выбираете в своём коде?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Оба описывают форму объекта и в большинстве случаев взаимозаменяемы
Только `interface` сливается при повторном объявлении (declaration merging), это нужно для расширения чужих типов
Только `type` описывает объединения, кортежи, условные и mapped-типы, псевдонимы примитивов
Расширение: `extends` у interface против пересечения `&`; конфликт полей при `extends` даёт ошибку, при `&` поле становится `never`
Осознанное правило команды: например interface для публичных объектных контрактов, type для всего остального
Что могут спросить следом
- Как добавить поле в тип
Window? - Что будет при пересечении
{ a: string } & { a: number }? - Может ли класс реализовать
type?
Разбор
Оба способа описывают форму объекта, и для простых случаев разницы почти нет. Различия такие. interface можно объявить повторно, и объявления сольются: так расширяют глобальные типы вроде Window или типы библиотек. type это псевдоним для любого типа: объединения, кортежа, функции, условного или mapped-типа, и повторно его не объявить. При наследовании interface B extends A сразу ругается, если поле конфликтует по типу, а пересечение A & B молча делает такое поле never. Класс может implements и интерфейс, и объектный type, если это не объединение. В своём коде я следую правилу проекта, обычно interface для объектных контрактов и type для объединений и вычисляемых типов. Главное, чтобы правило было одно на кодовую базу.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.