Enumerazioni in TypeScript

In alcuni casi un programma deve lavorare con un insieme limitato di valori predefiniti. Per esempio, lo stato di un ordine potrebbe essere "in_attesa", "spedito" oppure "consegnato".

TypeScript mette a disposizione le enumerazioni, per definire questi insiemi di valori attraverso la keyword enum.

Le enumerazioni permettono di assegnare un nome a ciascun valore e di utilizzarlo successivamente nel codice in modo più leggibile.

Sintassi delle enumerazioni

Possiamo definire un'enumerazione elencando i suoi valori tramite la keyword enum. Utilizziamo questo esempio per capire come:

enum Stato {
    InAttesa,
    Spedito,
    Consegnato
}

Possiamo quindi utilizzare i valori dell'enumerazione attraverso il suo nome:

const stato_attuale: Stato = Stato.Spedito;

In questo esempio, abbiamo assegnato a stato_attuale il valore Spedito dell'enumerazione. In questo modo non dobbiamo utilizzare direttamente il valore associato allo stato, ma possiamo riferirci a un nome descrittivo.

Enumerazioni numeriche

Se non specifichiamo esplicitamente i valori, TypeScript assegna automaticamente dei numeri progressivi agli elementi, partendo da 0.

Per esempio:

enum Giorno {
    Lunedi,
    Martedi,
    Mercoledi
}

I valori assegnati automaticamente saranno:

  • Lunedi vale 0.
  • Martedi vale 1.
  • Mercoledi vale 2.

Possiamo quindi scrivere:

console.log(Giorno.Lunedi); // 0

Con Giorno.Lunedi otteniamo 0.

Nelle enumerazioni numeriche possiamo anche effettuare l'operazione inversa:

console.log(Giorno[2]); // Mercoledi

In questo caso otteniamo Mercoledi.

Assegnazione manuale dei valori

Possiamo anche stabilire manualmente il valore associato a un elemento:

enum Stato {
    InAttesa = 1,
    Spedito = 2,
    Consegnato = 3
}

In questo esempio, Stato.InAttesa vale 1.

Possiamo anche iniziare da un valore diverso:

enum Priorita {
    Bassa = 10,
    Media,
    Alta
}

In questo caso TypeScript continua automaticamente la numerazione:

  • Prorita.Bassa vale 10.
  • Prorita.Media vale 11.
  • Prorita.Alta vale 12.

È quindi possibile combinare valori assegnati manualmente e valori generati automaticamente.

Enumerazioni di stringhe

Possiamo assegnare agli elementi di un'enumerazione anche valori di tipo string. Ad esempio:

enum Stato {
    InAttesa = "in_attesa",
    Spedito = "spedito",
    Consegnato = "consegnato"
}

console.log(Stato.Spedito); // "spedito"

A differenza delle enumerazioni numeriche, i valori delle stringhe devono essere generalmente specificati esplicitamente.

Enumerazioni nelle funzioni

Le enumerazioni possono essere utilizzate come tipo dei parametri di una funzione.

Ad esempio:

enum Stato {
    InAttesa = "in_attesa",
    Spedito = "spedito",
    Consegnato = "consegnato"
}

function aggiornaStato(stato: Stato) {
    console.log(`Nuovo stato: ${stato}`);
}

Possiamo passare uno dei valori dell'enumerazione:

aggiornaStato(Stato.Spedito);

Enumerazioni costanti

TypeScript permette di dichiarare un'enumerazione utilizzando const:

const enum Direzione {
    Su,
    Giu,
    Sinistra,
    Destra
}

Un const enum viene utilizzato principalmente per permettere al compilatore di sostituire direttamente i riferimenti ai suoi valori nel codice generato, invece di creare normalmente un oggetto.

Per esempio:

const enum Colore {
    Rosso,
    Verde,
    Blu
}

const colore = Colore.Rosso;

Con le opportune impostazioni del compilatore, il riferimento può essere sostituito direttamente con il valore corrispondente nel JavaScript prodotto.

Questo può ridurre il codice JavaScript generato e migliorare le performance del nostro programma.

Prova!Completa gli spazi vuoti con il testo appropriato.
// Definisci un'enumerazione in TypeScript
Ruolo {
    Admin,
    Editor,
    Lettore
}

console.log(Ruolo.Editor); // 1

Prova! Scegli l'opzione corretta tra quelle elencate.
enum Mese {
    Gennaio,
    Febbraio,
    Marzo
}

console.log(Mese[___]); // "Marzo"