What is the difference between enum and union types in TypeScript?
Quick answer
A string union such as "admin" | "user" exists only in the type system and erases to plain strings. A TypeScript enum compiles to a JavaScript object (unless it is a const enum), which is extra runtime code and a weaker default.
Most codebases prefer union types plus as const objects when they also need a runtime list (const Roles = ["admin", "user"] as const). Numeric enums are especially surprising because they reverse-map (Color[0] === "Red"). const enum inlines values but is banned in some projects because it breaks isolated modules and bundlers.
If a library already exposes an enum, use it. When you design a new API, a union is simpler to tree-shake, serialise and explain.