Codectionary / Developer documentation / TypeScript

Enums

An enum defines a named set of related constants, making code more readable than using raw numbers or strings for a fixed set of options. Numeric enums auto-increment by default, string enums require explicit values for each member, and const enum is fully erased at compile time, replaced by its literal values with no runtime object generated at all.

Syntax

enum Name { Member1, Member2 }

Examples

Numeric and String Enums

The two main enum flavors.

enum Direction {
  Up,    // 0
  Down,  // 1
  Left,  // 2
  Right  // 3
}

enum Status {
  Pending = "PENDING",
  Active = "ACTIVE",
  Completed = "COMPLETED"
}

function move(direction: Direction) {
  console.log(Direction[direction]); // reverse lookup: "Up", "Down", etc for numeric enums
}

move(Direction.Up);
console.log(Status.Active); // "ACTIVE"

const enum - Zero Runtime Cost

Fully erased at compile time, unlike a regular enum.

const enum Size {
  Small,
  Medium,
  Large
}

let mySize = Size.Medium;
// Compiles down to: let mySize = 1;
// No Size object exists at runtime at all - completely inlined

Best practices

  • Consider a literal type union ("small" | "medium" | "large") instead of an enum for simple cases - it requires no import and integrates more naturally with plain JS
  • Use string enums over numeric enums when the value might be logged, serialized, or debugged, since string values are self-explanatory
  • Use const enum only when you specifically want zero runtime footprint and do not need reverse lookups - be aware it has some restrictions in certain build tools
  • Avoid mixing numeric and string values within the same enum, as it can produce confusing reverse-lookup behavior

At a glance

Purpose
Static types for JavaScript
File extension
.ts ยท .tsx
Runs in
Compiled to JavaScript
Usually used with
JavaScript and its ecosystem

Specifications & further reading

Related TypeScript documentation