Вопрос проверяет глубокое понимание системы типов TypeScript и различий в расширяемости interface и type.
interface можно расширять с помощью extends и declaration merging. type расширяется через пересечения (&). interface лучше подходит для публичных контрактов и API. type более гибок, но не поддерживает автоматическое объединение объявлений. Эти различия важны при проектировании типов.
В TypeScript и interface, и type можно расширять, но механизмы и последствия у них разные.
interface поддерживает:
extends
declaration merging
interface User {
id: number
}
interface User {
name: string
}
В результате User будет содержать оба поля.
Преимущества:
удобно расширять контракты
подходит для библиотек
хорошо масштабируется
type расширяется через intersection types:
type User = {
id: number
}
type ExtendedUser = User & {
name: string
}
Особенности:
нет declaration merging
более явная композиция
лучше для сложных типов
interface можно объявлять несколько раз
type — нет
type поддерживает union (|)
interface — нет
публичные контракты → interface
композиция типов → type
Вывод:interface лучше для расширяемых контрактов, type — для сложной типовой логики и композиции.