Discriminated unions model states safely with TypeScript. Here's how to use them effectively.
Basic Discriminated Union#
API Response States#
Redux Actions#
Exhaustive Checking#
State Machines#
Form Validation#
HTTP Response Handling#
Event Handling#
Nested Discriminated Unions#
Factory Functions#
Best Practices#
Design:
✓ Use literal types for discriminant
✓ Name discriminant consistently (type, kind, status)
✓ Keep discriminant at top of type
✓ Use assertNever for exhaustive checks
Type Safety:
✓ Prefer switch over if/else
✓ Create type guards for reuse
✓ Use Extract/Exclude for filtering
✓ Document state transitions
Avoid:
✗ Optional discriminant properties
✗ Non-literal discriminant types
✗ Overlapping discriminant values
✗ Missing exhaustive checks
Conclusion#
Discriminated unions model complex states type-safely. Use them for API responses, Redux actions, state machines, and any scenario with multiple variants. The discriminant property enables TypeScript to narrow types automatically in switch statements.