Что такое дискриминированные объединения (Discriminated Unions) и как их использовать?
СобеседованиеСужение типовПаттерны типизации
- Все варианты union имеют общее поле с литеральным типом (дискриминант)
- Проверка дискриминанта автоматически сужает тип всего объекта
- Идеально для: стейт-машин, Redux actions, ответов API
- Паттерн:
type State = { status: "idle" } | { status: "loading" } | { status: "success"; data: T } | { status: "error"; error: Error }
- Исчерпывающие проверки с
never в default/else
- Несколько дискриминантов для более точного контроля