intermediate

Discriminated unions

Конечные автоматы, варианты API, exhaustive switch и невозможные состояния.

Discriminated union даёт каждому variant общий literal discriminant вроде `kind` или `status`. Switch по этому полю сужает payload. Это моделирует request states, domain events, command results и workflows, где impossible combinations не должны compile.

					type State =
  | { status: 'loading' }
  | { status: 'success'; data: string }
  | { status: 'error'; error: Error };
				

Exhaustive handling через `never` в default branch. Если discriminant расширяется до `string`, narrowing теряет силу.

На интервью: объясните, почему union лучше одного object с множеством optional state fields.

Типовые ошибки: путать похожие API и забывать edge cases в live coding.

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

  • Stable discriminant.
  • Exhaustive switches.
  • Избегайте wide string discriminants.