Enums em TypeScript e suas alternativas

Enums em TypeScript

Enum em TypeScript: numérico, string, const e as alternativas | We.Inc

Gere enums numéricos, de string e const a partir dos seus próprios nomes de membros, veja o JavaScript exato que cada um gera e compare com objetos as const e uniões de literais.

Um enum dá a um conjunto de constantes nomeadas um único tipo. Enums numéricos contam a partir de 0 e também mapeiam números de volta para nomes; enums de string precisam de um literal por membro e não têm mapeamento reverso; const enums são inseridos no lugar e desaparecem. Diferente da maior parte do TypeScript, enums comuns geram JavaScript de verdade, por isso muitos times preferem objetos as const.

Cinco formas de modelar um conjunto fixo de valores

Digite nomes de membros no gerador e alterne entre os estilos. Ele escreve a declaração em TypeScript e o JavaScript que o compilador geraria, para você ver o custo de cada escolha antes que ela chegue ao seu bundle.

Perguntas frequentes

O que é um mapeamento reverso?

Para enums numéricos, o tsc guarda as duas direções no objeto, então Direction.Up é 0 e Direction[0] é a string Up. Membros de string não ganham entrada reversa, porque o valor poderia colidir com o nome de outro membro.

Por que não consigo passar uma string simples para uma função que recebe um enum de string?

Membros de enum de string são tipos distintos. O compilador avisa que o literal não pode ser atribuído ao enum, então quem chama precisa escrever Status.Draft. Se você quer que quem chama passe o literal, use uma união de literais de string.

Como percorro os valores de um enum?

Para um enum de string, Object.values(MyEnum) retorna os valores. Para um enum numérico, o objeto também guarda as chaves reversas, então filtre: Object.values(MyEnum).filter((v) => typeof v === 'number').

Os enums estão obsoletos?

Não. Eles continuam fazendo parte do TypeScript. A opção mais nova erasableSyntaxOnly, adicionada no TypeScript 5.8, apenas permite que projetos que dependem de type stripping os proíbam, porque um enum não pode ser removido só apagando anotações.

O Node.js roda arquivos com enums diretamente?

Não com o type stripping padrão. A documentação do Node lista as declarações de enum entre os recursos que precisam de geração de código e não são suportados nesse modo, então compile-os com tsc ou outro transformador, ou troque por um objeto as const.

Enums numéricos: compactos, mas frágeis

Enums de string: legíveis e rígidos

O padrão as const

Os três tipos de enum e o que geram

Enum numérico com valor inicial

Mid e High continuam contando a partir de Low. O objeto gerado mapeia nas duas direções.

Enum de string

Cada membro é atribuído uma vez, sem entrada reversa.

const enum

A declaração desaparece e cada uso vira o seu valor.

Alternativas apagáveis

Objeto as const mais uma união derivada

Funciona com removedores de tipos, itera com Object.values e aceita a string pura.

União simples quando não é preciso uma lista em tempo de execução

Apagada por completo; o compilador ainda rejeita qualquer outra string.

Proibir enums em um projeto com type stripping

Com esta opção, uma declaração de enum é um erro de compilação.

Enum numérico

Enum de string

const enum

Objeto as const

Tipo união

Gerador de enum

Nome do tipo

Membros (separados por vírgula)

Primeiro número

Estilo de enum

TypeScript

JavaScript gerado

Copiar TypeScript

Copiar JavaScript

Use nomes que comecem com uma letra, $ ou _, e que tenham só letras, dígitos, $ ou _, sem repetir nenhum nome.

{n} membros

Comece grátis · Sem cartão de crédito

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site