Enum no TypeScript: Numeric e String 2026
Domine enums no TypeScript. Numeric, string, const enum e descubra quando union types são a escolha melhor.
Por que isso é importante
Enum no TypeScript: Numeric e String 2026. Domine enums no TypeScript. Numeric, string, const enum e descubra quando union types são a escolha melhor.
O Que É Enum no TypeScript
Enum (enumeração) é um tipo que define um conjunto de constantes nomeadas. Pensa numa lista fixa de opções: status de pedido, direções, roles de usuário, dias da semana.
No JavaScript não existe enum nativo. O pessoal resolve com objetos const ou strings soltas. Funciona, mas não tem proteção de tipo. O TypeScript trouxe enums como feature própria da linguagem.
Existem três sabores de enum: numeric (padrão, valores são números), string (valores são strings) e const enum (desaparece na compilação, vira só os valores inline). Cada um tem seu caso de uso.
Mas atenção: enums geram código JavaScript real na compilação. Isso aumenta o bundle. Por isso, muitos projetos modernos preferem union types pra casos simples. Vamos ver quando cada abordagem faz mais sentido.
Como Usar Enum Passo a Passo
Segue esse caminho e você usa enums com confiança:
enum. Use PascalCase pro nome e UPPER_CASE ou PascalCase pros membros.const enum. Ele desaparece no JavaScript final.Exemplos Práticos
Começando pelo numeric enum, o tipo padrão:
// Numeric enum - valores começam em 0
enum Direction {
Up, // 0
Down, // 1
Left, // 2
Right, // 3
}
// Você pode definir o valor inicial
enum HttpStatus {
OK = 200,
Created = 201,
BadRequest = 400,
NotFound = 404,
ServerError = 500,
}
function handleResponse(status: HttpStatus) {
if (status === HttpStatus.OK) {
console.log("Tudo certo!");
}
}
handleResponse(HttpStatus.OK); // funciona
// handleResponse(999); // ERRO! não faz parte do enum
String enums. Bem mais legíveis nos logs e no debug:
// String enum - cada membro tem valor string
enum OrderStatus {
Pending = "PENDING",
Processing = "PROCESSING",
Shipped = "SHIPPED",
Delivered = "DELIVERED",
Cancelled = "CANCELLED",
}
interface Order {
id: number;
status: OrderStatus;
total: number;
}
const order: Order = {
id: 1,
status: OrderStatus.Pending,
total: 299.90,
};
// No console: { id: 1, status: "PENDING", total: 299.9 }
// Muito mais legível que ver o número 0
Const enum: zero impacto no bundle.
// Const enum - desaparece na compilação
const enum Color {
Red = "RED",
Green = "GREEN",
Blue = "BLUE",
}
const cor = Color.Red;
// No JavaScript compilado: const cor = "RED";
// O enum some completamente. Só fica o valor inline.
// Reverse mapping - só funciona com numeric enums
enum Role {
Admin, // 0
User, // 1
Guest, // 2
}
console.log(Role.Admin); // 0
console.log(Role[0]); // "Admin" (reverse mapping)
console.log(Role[1]); // "User"
Enum vs union type. A comparação que todo mundo quer ver:
// Abordagem com enum
enum Theme {
Light = "light",
Dark = "dark",
System = "system",
}
// Abordagem com union type (mais leve)
type Theme2 = "light" | "dark" | "system";
// As duas funcionam como tipo
function setTheme(theme: Theme) { /* ... */ }
function setTheme2(theme: Theme2) { /* ... */ }
// Diferença: enum gera JavaScript, union não
// Union é só tipagem - desaparece 100% na compilação
// Quando enum ganha:
// - Precisa iterar sobre os valores
// - Quer reverse mapping
// - Valores são usados em runtime (switch, comparação)
// Quando union ganha:
// - Lista simples, poucas opções
// - Bundle size importa
// - Só precisa de checagem de tipo
Erros Comuns
Ciladas que pegam até dev experiente
Erro 1: Misturar valores numéricos e strings no mesmo enum. TypeScript deixa, mas cria confusão. Escolha um tipo e mantenha.
Erro 2: Usar const enum com isolatedModules (comum em projetos React/Vite). Const enums não funcionam com esse flag porque precisam ser resolvidos em tempo de compilação entre arquivos.
Erro 3: Comparar numeric enum com número literal. 'status === 0' funciona, mas perde toda a legibilidade. Sempre compare com o membro: 'status === Role.Admin'.
Erro 4: Criar enum pra 2 opções. 'enum Boolean { Yes, No }' é overengineering. Use um simples boolean ou union type: 'type Answer = "yes" | "no"'.
Erro 5: Esquecer que enums são bidirecionais (numeric). Role[0] retorna 'Admin'. Isso é útil mas confunde se você não sabe que existe.
Checklist: Uso de Enums
TypeScript na prática, não na teoria
Enums são só uma peça do quebra-cabeça. No CrazyStack, você usa TypeScript em todo o stack: enums pra status de agendamento, roles de usuário, tipos de pagamento. Tudo num projeto SaaS completo que funciona de ponta a ponta.
Você sai do curso com código profissional no portfólio. Backend Node.js, frontend React, banco com Prisma, deploy no ar. Não é exercício acadêmico. É produto de verdade.
Continue lendo
Como Usar Union Types no TypeScript
Entenda union types e como combinar tipos no TypeScript.
Como Usar Type no TypeScript
Domine type aliases no TypeScript com exemplos diretos.
Como Tipar Variáveis no TypeScript
Guia direto pra tipar variáveis no TypeScript sem complicação.
Interface no TypeScript
Quando usar interface