Il tipo enumerato di TypeScript è un modo pratico per impacchettare i valori correlati, con un significato chiaro.

Un enum, o un tipo enumerato, è una struttura di dati che consente di definire un insieme di valori denominati.

Le enum forniscono un modo per rappresentare un insieme fisso di valori come costanti. Possono contribuire a rendere il tuo codice più espressivo e autodocumentante assegnando nomi significativi a valori specifici. Qui imparerai come utilizzare gli enum in TypeScript.

Creazione di un'enumerazione

Le enum generalmente rappresentano un numero fisso di opzioni per un dato valore. Ad esempio, un'enumerazione che rappresenta i colori primari potrebbe avere valori fissi per rosso, giallo e blu.

Gli enum rappresentano i dati come un insieme di coppie chiave/valore note come membri enum. La chiave deve essere sempre una stringa. Tuttavia, il valore, un numero a incremento automatico per impostazione predefinita, può essere numerico, una stringa o calcolato.

Puoi creare un enum in

instagram viewer
il linguaggio TypeScript usando il enum parola chiave. Seguilo con il nome dell'enumerazione e un paio di parentesi graffe ({}) contenente i membri enum. Una convenzione di denominazione JavaScript comune afferma che i nomi enum dovrebbero iniziare con una lettera maiuscola.

enum Direzione {
Su,
Giù,
Sinistra,
Giusto
}

Questo esempio presenta un enum chiamato Direzione. L'enumerazione ha un membro che rappresenta ogni direzione: Su, Giù, Sinistra e Destra.

Poiché questo codice non specifica un valore per ciascuna delle chiavi, TypeScript assegnerà automaticamente i valori. Il primo membro, Up, avrà valore 0. I membri rimanenti avranno ciascuno un valore 1 maggiore di quello del membro precedente. Puoi dichiararlo esplicitamente se trovi difficile da ricordare:

enum Direzione {
Su = 0,
Giù = 1,
Sinistra = 2,
Giusto = 3,
}

Oppure puoi dichiarare esplicitamente valori diversi, lasciando i valori non dichiarati per continuare a incrementare come prima:

enum Stato {
Attivo = 9,
Inattivo, // 10
}

In questo esempio, il membro inattivo ha un valore pari a 10. Questo comportamento si applica alle enumerazioni che hanno solo valori numerici, non a quelle con stringhe o membri eterogenei.

I diversi tipi di enum

Gli enum in TypeScript hanno un tipo implicito che si basano sul tipo di valori contenuti dai loro membri. Il tipo più comune è l'enumerazione numerica, il cui comportamento viene trattato nella sezione precedente, ma esistono due varianti.

Enum di stringhe

Una stringa enum è un'enumerazione in cui tutti i suoi membri sono stringhe. A differenza delle enum numeriche, dove i valori vengono assegnati automaticamente, devi inizializzare ogni membro con una stringa:

enum Colori primari {
Rosso = "ROSSO",
Giallo = "GIALLO",
Blu = "BLU"
}

Sebbene le enumerazioni di stringhe non abbiano proprietà di incremento automatico, potrebbero avere più senso se le si serializza. I loro valori dovrebbero comunque essere descrittivi, senza nomi di membri, mentre un insieme di valori numerici potrebbe non essere autodescrittivo.

Enum eterogenei

Le enumerazioni eterogenee sono enumerazioni che contengono sia membri numerici che stringhe. Per esempio:

enum Risultato {
Successo = "SUCCESSO",
Fallimento = 0
}

Le enumerazioni eterogenee sono utili quando si hanno membri enum che richiedono tipi di valore diversi in base al contesto o al significato specifico di ogni membro. comunque, il Documentazione dattiloscritta scoraggia l'uso di enumerazioni eterogenee poiché introducono complessità che possono rendere il codice più soggetto a errori.

Membri Enum calcolati e costanti

Ogni membro enum ha un valore, che può essere costante o calcolato.

Membri Enum costanti

Un membro enum è costante se soddisfa una delle condizioni seguenti.

  1. È il primo membro dell'enumerazione e non ha inizializzatore.
  2. Non ha un inizializzatore e il membro enum precedente era una costante numerica.
  3. Viene inizializzato con un'espressione enum costante.

Secondo la documentazione TypeScript, un'espressione enum costante è un sottoinsieme di espressioni TypeScript che possono essere valutate completamente in fase di compilazione. Ad esempio, una stringa o un letterale numerico.

Ad esempio, i membri degli enum nel blocco di codice seguente sono tutti costanti:

// CASO 1
enum Direzione {
Su,
Giù,
Sinistra,
Giusto
}

// CASO 2
enum giorno feriale {
lunedì = 1,
Martedì,
Mercoledì,
Giovedì,
Venerdì
}

// CASO 3
enum Stagione {
Primavera = "PRIMAVERA",
Estate = "ESTATE",
Autunno = "AUTUNNO",
Inverno = "INVERNO"
}

Quando trasferisci membri enum costanti in JavaScript semplice, il codice generato utilizza i loro valori letterali. Ciò può essere vantaggioso per le prestazioni e semplificare il debug.

Ad esempio, ecco la versione transpilata dell'enumerazione della stagione:

var Stagione;
(funzione (Stagione) {
Stagione["Primavera"] = "PRIMAVERA";
Stagione["Estate"] = "ESTATE";
Stagione["Autunno"] = "AUTUNNO";
Stagione["Inverno"] = "INVERNO";
})(Stagione || (Stagione = {}));

Membri Enum calcolati

È possibile utilizzare i membri enum calcolati per assegnare valori ai membri enum in base a espressioni o altri calcoli dinamici. Per esempio:

enum Misurare {
Piccolo = 1,
Medio = calcoladimensione(12),
Grande = calcolaDimensione(5)
}

funzionecalcola Dimensione(valore: numero): numero{
ritorno valore * 5;
}

consolare.log (dimensioni. Grande)

IL Misurare enum ha tre membri: Piccolo, medio, E Grande. Assegna esplicitamente il valore 1 al membro Small. IL medio E Grande i membri usano una funzione calcola Dimensione per calcolare i loro valori in fase di esecuzione.

Quando si lavora con membri enum calcolati, è importante notare che i valori non sono noti fino al runtime. Ciò potrebbe introdurre maggiore complessità e potenziale errori di runtime rispetto ai membri enum con valori costanti.

Per esempio:

var Misurare;
(funzione (Misurare) {
Taglia[Taglia["Piccolo"] = 1] = "Piccolo";
Taglia[Taglia["Medio"] = calcoladimensione(12)] = "Medio";
Taglia[Taglia["Grande"] = calcoladimensione(5)] = "Grande";
})(Dimensione || (Dimensione = {}));

consolare.tronco d'albero(Misurare.Grande)

Il blocco di codice sopra è la versione transpilata del file Misurare enum. Si noti come TypeScript non includa i valori restituiti dacalcSize() nel codice JavaScript. Al contrario, include la chiamata alla funzione originale in modo che JavaScript determini i valori in fase di esecuzione.

Accesso ai valori di enumerazione

È possibile accedere ai valori dei membri enum utilizzando la notazione punto oggetto.

Per esempio:

enum Direzione {
Su = 0,
Giù = 1,
Sinistra = 2,
Giusto = 3,
}

consolare.log (direzione. Sinistra) // 2

Enumerazioni numeriche a mappatura inversa

Il mapping inverso negli enum numerici si riferisce alla possibilità di recuperare il nome del membro enum corrispondente dal relativo valore. Ciò può essere particolarmente utile quando si lavora con valori numerici, che potrebbe essere necessario decodificare.

Per impostazione predefinita, i valori enum in TypeScript sono mappati in avanti, il che significa che puoi accedere solo al valore associato a un nome. Tuttavia, puoi eseguire manualmente il mapping inverso per recuperare il membro enum in base al relativo valore.

Per esempio:

enum Direzione {
Su = 1,
Giù,
Sinistra,
Giusto
}

funzionegetDirectionName(direzioneValore: numero): corda{
// Mappatura inversa
cost directionName = Direzione[directionValue];
ritorno direzioneNome;
}

consolare.log (getDirectionName(1)); // "Su"
consolare.log (getDirectionName(3)); // "Sinistra"

Questo getDirectionName La funzione esegue il mapping inverso accedendo al nome del membro enum utilizzando il relativo valore come indice. La funzione prende a direzioneValore come argomento e recupera il nome del membro enum corrispondente utilizzando Direzione[direzioneValore].

Il mapping inverso può essere utile negli scenari in cui si dispone di un valore numerico ed è necessario determinare il nome del membro enum corrispondente. Fornisce un modo conveniente per lavorare con gli enum in entrambe le direzioni avanti e indietro.

Ci sono molte applicazioni di Enum

È possibile utilizzare le enumerazioni in vari scenari, come la gestione delle istruzioni switch, la definizione dei parametri delle funzioni, la mappatura dei dati e la rappresentazione di scelte o impostazioni.

Sia che tu debba rappresentare un insieme finito di opzioni o gestire complesse transizioni di stato, le enum in TypeScript sono uno strumento prezioso per migliorare la chiarezza e la struttura del tuo codice.