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.