Вопрос проверяет понимание различий между interface и type и практических рекомендаций их использования.
Интерфейсы удобны для описания формы объектов и хорошо масштабируются. Они поддерживают расширение и слияние объявлений. Это делает их удобными для публичных контрактов и библиотек. В большинстве случаев интерфейсы читаемее. Поэтому их часто рекомендуют использовать по умолчанию.
В TypeScript есть два основных способа описывать структуру объектов — interface и type.
interface — это способ описания контракта объекта, определяющий его форму и доступные поля.
Интерфейсы:
лучше подходят для объектных структур
легко расширяются через extends
поддерживают слияние объявлений
удобны для публичных API
Пример расширения:
interface User {
id: number;
}
interface Admin extends User {
role: string;
}
Если интерфейс объявлен несколько раз:
TypeScript объединит их
это полезно для расширения типов из библиотек
interface Window {
customProp: string;
}
type лучшеtype предпочтительнее, если:
нужны union-типы
нужны примитивы
используется сложная композиция типов
Интерфейсы рекомендуют использовать по умолчанию для описания объектов и контрактов. Они лучше масштабируются и удобнее для поддержки.