Ty­peS­cript enums são uma classe especial composta por variáveis cons­tan­tes, cujo valor pode ser definido pre­vi­a­mente. Ainda, enums podem ser numéricos ou baseados em strings.

O que são Ty­peS­cript enums?

enums (enu­me­ra­ted types) são tipos de dados contendo um conjunto finito de valores. Esse conjunto de valores é cla­ra­mente definido durante a de­cla­ra­ção de um enum (por meio de um iden­ti­fi­ca­dor) e não pode ser alterado pos­te­ri­or­mente. A ordem em que os valores aparecem também pode ser de­ter­mi­nada pre­vi­a­mente. Com Ty­peS­cript enums, você pode criar variáveis cons­tan­tes que melhoram a le­gi­bi­li­dade do seu código e, ao mesmo tempo, evitam erros. Essa é uma das poucas fun­ci­o­na­li­da­des que não é uma extensão tipada es­ta­ti­ca­mente do Ja­vaS­cript. Ela é dividida entre enums numéricos e baseados em strings na linguagem Ty­peS­cript**.

Ty­peS­cript enums numéricos

Em Ty­peS­cript enums numéricos, o primeiro valor é “0” por padrão. Em seguida, cada valor adicional é in­cre­men­tado em “1”. O método é iniciado com o parâmetro enum e armazena strings no formato numérico. Em um exemplo simples, definimos os meses e atri­buí­mos a eles um valor no primeiro passo. Em seguida, con­sul­ta­mos o valor definido para o mês de abril:

enum Meses {
Janeiro,
Fevereiro,
Marco,
Abril,
Maio,
Junho,
Julho,
Agosto,
Setembro,
Outubro,
Novembro,
Dezembro
}
 
let mesAtual = Meses.Abril;
console.log(mesAtual);
ty­pes­cript

A saída será:

3
ty­pes­cript

O sistema inicia a atri­bui­ção dos valores, por padrão, com “0”. Janeiro recebe o valor “0”, fevereiro o valor “1”, março o valor “2” e abril o valor “3”. Como isso não cor­res­ponde à numeração real dos meses, ini­ci­a­li­za­mos os Ty­peS­cript enums e atri­buí­mos a eles os valores corretos. Para isso, pre­ci­sa­mos alterar o código anterior:

enum Meses {
Janeiro = 1,
Fevereiro,
Marco,
Abril,
Maio,
Junho,
Julho,
Agosto,
Setembro,
Outubro,
Novembro,
Dezembro
}
 
let mesAtual = Meses.Abril;
console.log(mesAtual);
ty­pes­cript

Agora, a nossa saída será:

4
ty­pes­cript

Basta atribuir o valor desejado apenas ao primeiro mês. O sistema então con­ti­nu­ará a contagem de forma usual, in­cre­men­tando um valor por vez.

Atribuir valores numéricos próprios

Se você quiser evitar a contagem au­to­má­tica, pode atribuir, a cada elemento de um enum, um valor numérico próprio. No exemplo a seguir, temos quatro volumes de uma série de livros e desejamos armazenar o número de páginas como um valor fixo. Em seguida, queremos exibir o número de páginas do segundo volume para ve­ri­fi­ca­ção. O código é o seguinte:

enum NumeroDePaginas {
Volume1 = 491,
Volume2 = 406,
Volume3 = 360,
Volume4 = 301
}
 
let paginas = NumeroDePaginas.Volume2;
console.log(paginas);
ty­pes­cript

Nossa saída será:

406
ty­pes­cript

Ty­peS­cript enums baseados em strings

Ty­peS­cript enums baseados em strings funcionam de maneira bastante similar. A diferença é que você deve atribuir um valor em formato de string aos enums, em vez de um valor numérico. No exemplo a seguir, as­so­ci­a­mos os dias da semana à abre­vi­a­ção cor­res­pon­dente em formato de string, inserida entre aspas. Em seguida, con­sul­ta­mos os valores para “sexta-feira” e “terça-feira”, somente para ve­ri­fi­ca­ção. O código é assim:

enum DiasDaSemana {
Segunda = "Seg",
Terca = "Ter",
Quarta = "Qua",
Quinta = "Qui",
Sexta = "Sex",
Sabado = "Sab",
Domingo = "Dom"
};
 
console.log(DiasDaSemana.Sexta);
console.log(DiasDaSemana.Terca);
ty­pes­cript

A saída cor­res­pon­dente será:

Sex
Ter
ty­pes­cript

Combinar números e strings

Em teoria, a linguagem Ty­peS­cript também permite combinar enums numéricos e baseados em strings. Embora os casos de uso para essa opção sejam limitados, apre­sen­ta­mos a seguir um exemplo jus­ti­fi­cá­vel. Aqui, definimos di­fe­ren­tes valores. O processo permanece o mesmo:

enum DiasDaSemana {
Segunda = "Seg",
Terca = 2,
Quarta = 3,
Quinta = "Qui",
Sexta = "Sex",
Sabado = 6,
Domingo = "Dom"
};
 
console.log(DiasDaSemana.Sexta);
console.log(DiasDaSemana.Terca);
ty­pes­cript

Nossa saída será a seguinte:

Sex
2
ty­pes­cript

Reverse mapping para tipos de dados cons­tan­tes

A lógica do reverse mapping (ma­pe­a­mento reverso) afirma o seguinte: se você pode acessar o valor de um Ty­peS­cript enum, também pode acessar o res­pec­tivo nome. Para ilustrar o princípio, voltamos ao exemplo dos dias da semana:

enum DiasDaSemana {
Segunda = 1,
Terca,
Quarta,
Quinta,
Sexta,
Sabado,
Domingo
};
 
DiasDaSemana.Sexta
DiasDaSemana["Sexta"];
DiasDaSemana[6];
ty­pes­cript

Aqui, DiasDaSemana.Sexta retorna o valor “6”. O mesmo vale para DiasDaSemana["Sexta"]. En­tre­tanto, com o reverse mapping, DiasDaSemana[6] retornará o nome “Sexta”, como você pode observar:

enum DiasDaSemana {
Segunda = 1,
Terca,
Quarta,
Quinta,
Sexta,
Sabado,
Domingo
};
 
console.log(DiasDaSemana);
ty­pes­cript

A saída será:

{
    '1': 'Segunda',
    '2': 'Terca',
    '3': 'Quarta',
    '4': 'Quinta',
    '5': 'Sexta',
    '6': 'Sabado',
    '7': 'Domingo',
    Segunda: 1,
    Terca: 2,
    Quarta: 3,
    Quinta: 4,
    Sexta: 5,
    Sabado: 6,
    Domingo: 7
}
ty­pes­cript

Converter Ty­peS­cript enums em arrays

Também é possível converter enums em arrays Ty­peS­cript. No nosso exemplo de dias da semana, o código seria assim:

enum DiasDaSemana {
Segunda = "Seg",
Terca = "Ter",
Quarta = "Qua",
Quinta = "Qui",
Sexta = "Sex",
Sabado = "Sab",
Domingo = "Dom"
};
 
const diasDaSemanaArray: { label: string; value: string }[] = [];
 
for (const key in DiasDaSemana) {
    if (DiasDaSemana.hasOwnProperty(key)) {
        diasDaSemanaArray.push({ label: key, value: DiasDaSemana[key] });
    }
}
 
console.log(diasDaSemanaArray);
ty­pes­cript

Isso resultará na seguinte saída:

[
    { label: 'Segunda', value: 'Seg' },
    { label: 'Terca', value: 'Ter' },
    { label: 'Quarta', value: 'Qua' },
    { label: 'Quinta', value: 'Qui' },
    { label: 'Sexta', value: 'Sex' },
    { label: 'Sabado', value: 'Sab' },
    { label: 'Domingo', value: 'Dom' }
]
ty­pes­cript
Dica

Faça a im­plan­ta­ção do seu site ou aplicação estático di­re­ta­mente pelo GitHub: Com o Deploy Now da IONOS, você se beneficia de uma con­fi­gu­ra­ção rápida e fa­ci­li­tada, fluxos de trabalho oti­mi­za­dos e diversos modelos de tarifa. Encontre a solução que melhor se adapta ao seu projeto!

Ir para o menu principal