Both enums and union types define a set of allowed values. Here's when to use each.
Basic Enum
Loading code block...
Basic Union Type
Loading code block...
Const Assertions
Loading code block...
Runtime Behavior
Loading code block...
Const Enums
Loading code block...
Type Safety Comparison
Loading code block...
Discriminated Unions
Loading code block...
Bundle Size
Loading code block...
API Design
Loading code block...
Extending and Combining
Loading code block...
Working with Values
Loading code block...
Recommendations
Loading code block...
Best Practices
Union Types:
✓ Prefer for most use cases
✓ Zero runtime overhead
✓ Better tree-shaking
✓ Easy composition
Const Objects:
✓ When you need runtime values
✓ For iteration over values
✓ Namespace organization
✓ Tree-shakeable
String Enums:
✓ Team familiarity
✓ Legacy codebase compatibility
✓ IDE autocomplete preference
✓ Reverse mapping not needed
Avoid:
✗ Numeric enums (type safety issues)
✗ Heterogeneous enums
✗ Computed enum values
✗ Over-engineering simple cases
Conclusion
Prefer union types for most cases—they're simpler, have zero runtime cost, and compose well. Use const objects when you need runtime values and iteration. String enums are acceptable for team preference but avoid numeric enums due to type safety issues.