foundation

type vs interface

Выбор между type alias и interface для object shapes, unions, declaration merging и public API.

И `type` alias, и `interface` могут описывать object shapes. `interface` открыт для declaration merging и часто используется для public контрактов в библиотеках. `type` alias универсальнее: unions, primitives, tuples, conditional и mapped results.

					type Result = { ok: true; data: string } | { ok: false; error: string };
interface User { id: string; name: string }
				

Прагматичное правило: выберите один стиль для object shapes в кодовой базе. `type` — для unions и вычисляемых форм. `interface` merging может удивить, когда ambient declarations накапливаются.

На интервью: не утверждайте, что один вариант всегда лучше. Объясните различия расширения и когда merging намеренный.

Типовые ошибки: расширение union как object shape; случайный global merging; споры только о стиле.

Компромисс часто между ясностью и безопасностью или expressiveness и maintainability. Чеклист:

  • `type` для unions и computed shapes.
  • Знайте поведение `interface` merging.
  • Держите public контракты consistent.