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.