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

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 ошибок.