Come usare gli enum in TypeScript passo dopo passo

Gli enum in TypeScript sono un modo per definire un set di costanti denominate che possono essere utilizzate per rappresentare una raccolta di valori correlati. Rendono il codice più leggibile e gestibile assegnando nomi amichevoli a questi valori. Questa guida ti guiderà passo dopo passo nell'utilizzo degli enum in TypeScript, coprendone i tipi, i vantaggi e gli esempi pratici.

Che cosa è un Enum?

Un enum (abbreviazione di "enumeration") è uno speciale tipo di dati in TypeScript che consente di definire un set di costanti denominate. Queste costanti denominate possono rappresentare valori numerici o stringa, rendendo il codice più descrittivo e meno soggetto a errori.

Tipi di enum in TypeScript

Esistono tre tipi di enum in TypeScript:

  • Enum numerici
  • Enumerazioni stringa
  • Enum eterogenei

Enum numerici

Gli enum numerici sono l'impostazione predefinita in TypeScript. Sono un set di valori denominati a cui vengono assegnati automaticamente valori numerici a partire da 0, o da un valore iniziale personalizzato, se specificato.

Esempio di enumerazione numerica di base

Di seguito è riportato un semplice esempio di enum numerico:

enum Direction {
  Up,
  Down,
  Left,
  Right
}

let move: Direction = Direction.Up;
console.log(move); // Output: 0

In questo esempio, l'enum Direction ha quattro membri: Up, Down, Left e Right. Per impostazione predefinita, a Up viene assegnato il valore 0, Down è 1 e così via. Puoi anche specificare valori numerici personalizzati per i membri.

Enum numerico con valori personalizzati

È possibile assegnare valori personalizzati ai membri enum:

enum Status {
  New = 1,
  InProgress,
  Done = 5,
  Cancelled
}

console.log(Status.New); // Output: 1
console.log(Status.InProgress); // Output: 2
console.log(Status.Done); // Output: 5
console.log(Status.Cancelled); // Output: 6

In questo esempio, New è impostato su 1, InProgress è impostato automaticamente su 2, Done è impostato su 5 e Cancelled è impostato automaticamente su 6.

Enumerazioni stringa

Gli enum stringa sono un altro tipo di enum in cui ogni membro viene inizializzato con una stringa letterale, rendendoli più leggibili e facili da sottoporre a debug.

Esempio di enumerazione stringa di base

Di seguito è riportato un esempio di enum di stringa:

enum Direction {
  Up = "UP",
  Down = "DOWN",
  Left = "LEFT",
  Right = "RIGHT"
}

let move: Direction = Direction.Left;
console.log(move); // Output: "LEFT"

In questo esempio, ogni membro enum viene inizializzato con un valore stringa. A differenza degli enum numerici, gli enum stringa non hanno valori auto-incrementati.

Enum eterogenei

Gli enum eterogenei sono enum che contengono sia membri stringa che numerici. Sebbene sia possibile definirli, in genere non è consigliabile in quanto può portare a confusione ed errori nel codice.

Esempio di enum eterogeneo

Ecco un esempio di enum eterogeneo:

enum MixedEnum {
  Yes = "YES",
  No = 0,
  Maybe = 1
}

console.log(MixedEnum.Yes); // Output: "YES"
console.log(MixedEnum.No); // Output: 0

In questo esempio, MixedEnum contiene sia valori stringa che numerici. Utilizzare tali enum con cautela poiché potrebbero causare confusione.

Casi d'uso di Enum

Gli enum sono utili in diversi scenari:

  • Rappresenta un insieme di costanti correlate, come le direzioni (Su, Giù, Sinistra, Destra).
  • Definizione degli stati in una macchina a stati (Nuovo, In corso, Fatto, Annullato).
  • Utilizzarli nelle istruzioni switch-case per una migliore leggibilità.

Enum in un esempio di switch-case

L'utilizzo di enum in un'istruzione switch-case migliora la leggibilità del codice e semplifica la gestione degli stati.

enum Status {
  New,
  InProgress,
  Done,
  Cancelled
}

function getStatusMessage(status: Status): string {
  switch (status) {
    case Status.New:
      return "The task is new.";
    case Status.InProgress:
      return "The task is in progress.";
    case Status.Done:
      return "The task is completed.";
    case Status.Cancelled:
      return "The task is cancelled.";
    default:
      return "Unknown status.";
  }
}

console.log(getStatusMessage(Status.InProgress)); // Output: "The task is in progress."

In questo esempio, l'istruzione switch-case è più leggibile e meno soggetta a errori, grazie all'utilizzo degli enum.

Conclusione

Gli enum in TypeScript forniscono un modo potente per definire un set di costanti denominate, migliorando la leggibilità del codice e la sicurezza dei tipi. Utilizzando enum numerici, stringhe o persino eterogenei, puoi gestire e organizzare meglio il tuo codice. Con questa guida passo passo, dovresti ora sentirti a tuo agio nell'uso degli enum in TypeScript per rendere il tuo codice più pulito e più gestibile.