TypeScript Enums

TypeScript tutorial

🧮 TypeScript Enums

Enums in TypeScript let you define a set of named constants.

They make code more readable, less error-prone, and easier to maintain.


1️⃣ Numeric Enums (Default)

By default, enum members start at 0 and increment by 1.

enum Direction {
Up,
Down,
Left,
Right
}
let move: Direction = Direction.Up;

Values:

Direction.Up // 0
Direction.Down // 1

2️⃣ Numeric Enums with Custom Values

You can set the starting value (or all values).

enum Status {
Pending = 1,
Approved,
Rejected
}

Values:

Status.Pending // 1
Status.Approved // 2
Status.Rejected // 3

3️⃣ String Enums (Most Recommended ⭐)

Each member is explicitly set to a string.

enum Role {
Admin = "ADMIN",
User = "USER",
Guest = "GUEST"
}
let userRole: Role = Role.Admin;

✅ Better readability
✅ Safer for APIs & debugging


4️⃣ Heterogeneous Enums (Avoid ❌)

Mixing string and number values is allowed but discouraged.

enum Mixed {
No = 0,
Yes = "YES"
}

5️⃣ Using Enums in Conditions

enum OrderStatus {
Placed,
Shipped,
Delivered
}
function trackOrder(status: OrderStatus) {
if (status === OrderStatus.Shipped) {
console.log(“Your order is on the way!”);
}
}


6️⃣ Enum Reverse Mapping (Numeric Only)

Numeric enums support reverse lookup.

enum Color {
Red,
Green,
Blue
}
Color[0]; // “Red”
Color[“Red”]; // 0

⚠️ Reverse mapping does not work with string enums.


7️⃣ const enum (Compile-Time Optimization)

Removed completely during compilation.

const enum Size {
Small,
Medium,
Large
}
let shirtSize = Size.Medium;

✅ Faster
❌ Cannot be accessed at runtime


8️⃣ Enum vs Union Types

Sometimes union types are a better alternative.

type Status = "pending" | "approved" | "rejected";
Enums Union Types
Runtime object Compile-time only
Reverse mapping No
Larger JS output Smaller

🔑 Enums Summary

Enum Type Use Case
Numeric Simple internal values
String APIs, logs, UI states
const enum Performance critical
Heterogeneous ❌ Avoid

⭐ Best Practices

✔ Prefer string enums
✔ Use const enum for performance
✔ Avoid heterogeneous enums
✔ Consider union types for simple cases

You may also like...