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.
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.
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); // 0Con Giorno.Lunedi otteniamo 0.
Nelle enumerazioni numeriche possiamo anche effettuare l'operazione inversa:
console.log(Giorno[2]); // MercolediIn questo caso otteniamo Mercoledi.
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.
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.
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);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.