Tipo Enum

Definição

É uma estrutura de dados para armazenar valores constantes e imutáveis.

Esses valores são indexadas, iniciando no 0.

É possível alterar o índice de um valor no enum (se fazer isso, é obrigatório informar um inicializar em cada valor do enum):

enum Cores {
  VERMELHO = 10,
  AZUL = 20,
  AMARELO = 30,
}
 
console.log(Cores.VERMELHO); // 10
console.log(Cores[10]); // VERMELHO

Ao declarar 2 enum com o mesmo nome, ocorre a junção dos seus valores em um único enum (merge):

enum Cores {
  VERMELHO = 10,
  AZUL = 20,
  AMARELO = 30,
}
 
enum Cores {
  ROXO = 40,
  VERDE = 50,
}
 
console.log(Cores);
/*
{
  '10': 'VERMELHO',
  '20': 'AZUL',
  '30': 'AMARELO',
  '40': 'ROXO',
  '50': 'VERDE',
  VERMELHO: 10,
  AZUL: 20,
  AMARELO: 30,
  ROXO: 40,
  VERDE: 50
}
*/

Exemplo

enum Cores {
  VERMELHO,
  AZUL,
  AMARELO,
}
 
console.log(Cores);
/*
{
  '0': 'VERMELHO',
  '1': 'AZUL',
  '2': 'AMARELO',
  VERMELHO: 0,
  AZUL: 1,
  AMARELO: 2
}
*/
 
console.log(Cores.VERMELHO); // 0
console.log(Cores[0]); // VERMELHO
export enum Cores {
  VERMELHO = 10,
  AZUL = 20,
  AMARELO = 30,
  ROXO = 40,
  VERDE = 50,
}
 
function escolherCor(cor: Cores): void {
  console.log(Cores[cor]);
}
 
escolherCor(Cores.ROXO); // ROXO

OBS

A vantagem de se utilizar enum em outras linguagens é a segurança de tipos, porém, mesmo o TypeScript tendo validações de tipos, isso não se aplica aos enum.

export enum Cores {
  VERMELHO = 10,
  AZUL = 20,
  AMARELO = 30,
  ROXO = 40,
  VERDE = 50,
}
 
function escolherCor(cor: Cores): void {
  console.log(Cores[cor]);
}
 
escolherCor(12345); // undefined
//            ^
//            |
// não ocorre nenhum erro de compilação