Better Enums in Typescript

Enums in typescript are cursed. This is not up for discussion. What is up for discussion is a good alternative.

Here’s a nice implementation:


const UserRoles = ["staff", "admin", "user"] as const;

type UserRole = typeof UserRoles[number];

type User = {
  role: UserRole;
}

This gives us rpetty much everything we’d need:

  • Iteration through the array of values (for example, for populating a dropdown).
  • A value-constrained string type constrained to the enum values
  • Type completion and everything else we’d possibly want from an enum

Alternative way:


const UserRoles = {
  "staff": "staff",
  "admin": "admin",
  "user": "user"
} as const

type UserRole = typeof UserRoles[typeof keyof UserRoles];

end of storey Last modified: