Foto de Perfil do Gustavo Sales

Gustavo Sales

Frontend Engineer@BlastRadius

Criando coisas incríveis desde 2012, com muita atenção aos detalhes, sentimento de dono e exercendo o feedback.

Você pode me chamar de Gus.😁
21.01.2026 - Última Postagem...

Por que você deveria evitar enums no TypeScript

Enums são uma das poucas features do TypeScript que eu recomendo evitar, e na verdade eu tenho lidado com isso de outra forma nos meus projetos.

Vou explicar o porquê, começando com:

Problema de runtime

Um enum como este:

enum UserType {
  Admin = "admin",
  Common = "common"
}

Gera código de runtime no seu bundle:

var UserType;
(function (UserType) {
    UserType["Admin"] = "admin";
    UserType["Common"] = "common";
})(UserType || (UserType = {}));

TypeScript deveria ser uma linguagem zero-runtime, e os enums quebram essa regra.

Enums numéricos são inseguros

Ok, talvez isso não seja tão grande assim, mas olha isso:

enum Status {
  Active,   // 0
  Inactive  // 1
}

const status: Status = 999; // TypeScript aceita QUALQUER número!!!

Se você reordenar os membros, todos os valores mudam. TypeScript não vai pegar isso. Pode acontecer né... E ninguém vai ver na PR.

A forma melhor que eu uso

export const UserType = {
  Admin: "admin",
  Common: "common",
} as const;

export type UserType = typeof UserType[keyof typeof UserType];

Ou ainda mais simples com arrays, dependendo do seu caso:

const USER_TYPES = ["admin", "common"] as const;
type UserType = typeof USER_TYPES[number]; // "admin" | "common"

Mesma segurança de tipos, zero código de runtime, e você pode derivar tipos diretamente dos seus dados.

Sinceramente eu prefiro a primeira opção com export const UserType.

Ah, e o Anders Hejlsberg, criador do TypeScript, já expressou que não incluiria enums se pudesse começar de novo. Então...

Use const objects ou const arrays no lugar.

Como vocês lidam com enums?