Skip to content

Diferenças entre um Enum e um objeto Javascript

Você pode se perguntar quais benefícios o uso de um Enum tem sobre o uso de um objeto em Javascript. Isto é porque ambos podem resolver problemas semelhantes, tais como definir um número finito de opções, nomear valores que não são muito claros por si só, etc.

Validação

Vamos ver o seguinte exemplo usando um objeto:

ts
const Transmission = {
  Automatic: 'automatic', 
  Manual: 'manual',
};

Transmission.Automatic = 'electric'; // 🙃 sem validação 

let transmission: string;
transmission = Transmission.Automatic; // 'automatic'
transmission = Transmission.Manual; // 'manual'
transmission = 'electric'; // 'electric' - 🙃 sem validação

Como vemos no exemplo, usar objetos facilita a atribuição de valores padrão, mas não nos permite validar se o que atribuímos está dentro dos valores finitos previamente definidos.

Agora vamos ver o exemplo usando um Enum:

ts
enum Transmission {
  Automatic = 'automatic',
  Manual = 'manual',  
}

// ❌ Não é possível atribuir a 'Automatic' porque é uma propriedade somente leitura.
Transmission.Automatic = 'electric';

let transmission: Transmission;  
transmission = Transmission.Automatic; // 'automatic'
transmission = Transmission.Manual; // 'manual'

// ❌ O tipo '"electric"' não pode ser atribuído ao tipo 'Transmission'  
transmission = 'electric';

Ao usar Enum, delegamos a validação das opções disponíveis ao Typescript. Isso pode nos fornecer mensagens de erro úteis durante o estágio de desenvolvimento.