O TypeScript atua como uma extensão do JavaScript, introduzindo um sistema de tipagem robusto para aprimorar a segurança do código.
Ao adotar o TypeScript, os desenvolvedores podem identificar e corrigir erros de maneira mais eficiente, já nas primeiras fases do desenvolvimento. Os Enums, ou enumerações, são uma das ferramentas cruciais que o TypeScript oferece para facilitar a criação de código mais seguro e confiável. Enums são uma construção popular em TypeScript que ajuda você a escrever um código mais seguro.
Este artigo tem como objetivo detalhar o que são Enums, como criá-los e utilizá-los, além de outras considerações relevantes.
O que é um Enum?
Enum é a abreviação de tipo enumerado. Um tipo de dados enumerado é definido pelos diferentes valores que uma variável desse tipo pode assumir. Os diferentes valores que pode assumir são frequentemente chamados de membros ou elementos.
Neste artigo, iremos nos referir a eles como membros. Enums não são um recurso exclusivo do TypeScript; tipos enumerados também são utilizados em outras linguagens de programação. A implementação de enums resulta em maior segurança de tipo nos programas TypeScript.
Recomendação de leitura: Principais bibliotecas e ambientes de execução do TypeScript para desenvolvedores
Por que usar Enumerações?
Enums simplificam a especificação dos valores que uma variável ou um argumento de função pode aceitar. Isso assegura que os desenvolvedores sempre forneçam os valores esperados, reduzindo a ocorrência de bugs e promovendo um código mais robusto e seguro.
Pré-requisitos para trabalhar com Enums
Este guia prático abordará como trabalhar com Enums no TypeScript. Para acompanhar os exemplos, é necessário ter um ambiente de desenvolvimento TypeScript configurado e funcionando.
Certifique-se de ter o Node.js instalado para executar códigos JavaScript. Se o TypeScript ainda não estiver instalado, sugiro que consulte o vídeo abaixo para obter instruções detalhadas:
Uma alternativa para compilar e executar scripts imediatamente é utilizar o ts-node. Embora eu utilize esta opção neste artigo, para projetos maiores, recomendo instalar o TypeScript. Para executar um script usando ts-node, utilize o seguinte comando:
npx ts-node <nome_do_script>
Este artigo também pressupõe que você esteja familiarizado com JavaScript e conceitos básicos do TypeScript.
Trabalhando com um Enum Simples
Como Criar um Enum Simples
Em TypeScript, Enums são criados usando a palavra-chave `enum`, seguida pelo nome do enum e a lista de seus membros. O exemplo abaixo demonstra a declaração de uma enumeração para os pontos cardeais:
enum Direcao { Norte, Leste, Sul, Oeste }
Note que os membros do enum não são strings, portanto não requerem aspas.
Como Usar um Enum Simples
A atribuição de um valor de enum a uma variável é realizada da seguinte maneira:
const pontoCardinal: Direcao = Direcao.Norte;
Como a variável é atribuída na declaração, o TypeScript pode inferir o tipo de dados. Assim, podemos simplificar a declaração:
const pontoCardinal = Direcao.Norte;
Para descobrir o valor armazenado na variável `pontoCardinal`, podemos usar `console.log`:
console.log(pontoCardinal);
O resultado será:
0
Apesar de atribuirmos `Direcao.Norte`, a variável armazena o valor zero. Isso ocorre porque cada membro de um enum recebe um valor numérico começando por zero. O primeiro membro recebe 0, o segundo 1, e assim por diante. Veja o exemplo:
console.log(Direcao.Norte, Direcao.Leste, Direcao.Sul, Direcao.Oeste)
Portanto, podemos verificar se a variável `pontoCardinal` é igual a Norte, comparando-a com zero:
// Comparação por igualdade let ehNorte = pontoCardinal == 0; // Imprime o resultado console.log(ehNorte);
Como vimos, `Direcao.Norte` é igual a 0. Portanto, em vez de compararmos com o número zero, podemos comparar diretamente com `Direcao.Norte`:
// Verifica se a direção é Norte ehNorte = pontoCardinal == Direcao.Norte; // Imprime o resultado console.log(ehNorte);
Esta abordagem é útil e provavelmente a forma como você utilizará os valores de enums. No entanto, você pode ir além, como veremos adiante. A próxima seção abordará como trabalhar com valores personalizados.
Trabalhando com Valores Personalizados
Por padrão, o TypeScript atribui valores numéricos a membros de enum começando do zero. Contudo, você pode definir valores personalizados para cada membro. Por exemplo:
enum AvaliacaoEstrelas { MuitoRuim = 1, Ruim = 2, Mediano = 3, Bom = 4, Excelente = 5 }
Uma alternativa seria:
enum AvaliacaoEstrelas { MuitoRuim = 1, Ruim, Mediano, Bom, Excelente }
Neste caso, o primeiro membro recebe o valor 1, e os seguintes são incrementados automaticamente a partir do valor anterior. Assim, `Ruim` recebe 2, `Mediano` recebe 3, e assim por diante.
Os membros de um enum não se limitam a valores numéricos, como veremos adiante. No entanto, aqueles com valores numéricos se comportam como números comuns.
console.log(typeof AvaliacaoEstrelas.Mediano);
O resultado será “number”. Isso significa que você pode realizar operações numéricas, incluindo comparações:
console.log(AvaliacaoEstrelas.Excelente > AvaliacaoEstrelas.Mediano)
Isso imprimirá “true”.
Utilizando Strings como Valores Personalizados
Como mencionado anteriormente, os membros de um enum podem receber valores de string em vez de apenas números. Veja como:
enum Escolha { PilulaVermelha = "Saber Tudo" PilulaAzul = "Não Saber Nada" }
Neste caso, os membros de enum se comportarão de forma similar, mas, por serem strings, permitirão operações típicas de strings em vez de operações numéricas.
Enums Heterogêneos
É possível misturar strings e valores numéricos em um mesmo enum, embora isso não seja recomendado e não seja muito útil.
enum Misto { Primeiro = "String" Segundo = 2 }
Considerações Finais
Neste artigo, exploramos o conceito de Enums em TypeScript, sua importância e os diferentes tipos de valores que seus membros podem ter.
Recomendamos a leitura do nosso artigo sobre Tipo vs. Interface em TypeScript.