TypeScripts oppregnede type er en hendig måte å pakke relaterte verdier på, med klar mening.

En enum, eller en enumerert type, er en datastruktur som lar deg definere et sett med navngitte verdier.

Enums gir en måte å representere et fast sett med verdier som konstanter. De kan bidra til å gjøre koden din mer uttrykksfull og selvdokumenterende ved å gi meningsfulle navn til spesifikke verdier. Her vil du lære hvordan du kan bruke enums i TypeScript.

Opprette en enum

Enums representerer vanligvis et fast antall alternativer for en gitt verdi. For eksempel kan en enum som representerer primærfarger ha faste verdier for rød, gul og blå.

Enums representerer data som et sett med nøkkel/verdi-par kjent som enum-medlemmer. Nøkkelen må alltid være en streng. Imidlertid kan verdien – et automatisk økende tall som standard – være numerisk, en streng eller beregnet.

Du kan lage en enum i TypeScript-språket bruker enum nøkkelord. Følg den med enumens navn og et par krøllete seler ({}) som inneholder enum-medlemmene.

instagram viewer
En vanlig JavaScript-navnekonvensjon sier at enum-navn skal begynne med stor bokstav.

enum Retning {
Opp,
Ned,
Venstre,
Ikke sant
}

Dette eksemplet har en enum kalt Retning. Enumet har et medlem som representerer hver retning: Opp, Ned, Venstre og Høyre.

Siden denne koden ikke spesifiserer en verdi for hver av nøklene, vil TypeScript automatisk tildele verdier. Det første medlemmet, Up, vil ha en verdi på 0. De gjenværende medlemmene vil hver ha en verdi 1 større enn det forrige medlemmets. Du kan uttrykkelig deklarere dette hvis du synes det er vanskelig å huske:

enum Retning {
Opp = 0,
Ned = 1,
Venstre = 2,
Høyre = 3,
}

Eller du kan eksplisitt deklarere forskjellige verdier, og la uoppgitte verdier fortsette å øke som før:

enum Status {
Aktiv = 9,
Inaktiv, // 10
}

I dette eksemplet har det inaktive medlemmet en verdi på 10. Denne oppførselen gjelder for enums som bare har numeriske verdier, ikke de med streng eller heterogene medlemmer.

De forskjellige typene Enum

Enums i TypeScript har en implisitt type de baserer på typen verdier medlemmene deres har. Den vanligste typen er den numeriske enum, hvis oppførsel den forrige delen dekker, men det er to varianter.

Enums for strenger

En strengenum er en enum der alle medlemmene er strenger. I motsetning til numeriske oppslag, der verdier tildeles automatisk, må du initialisere hvert medlem med en streng:

enum Primærfarger {
Rød = "RØD",
Gul = "GUL",
Blå = "BLÅ"
}

Selv om strengoppslag ikke har auto-inkrementerende egenskaper, kan de være mer fornuftige hvis du serialiserer dem. Verdiene deres skal fortsatt være beskrivende, uten medlemsnavn, mens et sett med numeriske verdier kanskje ikke er selvbeskrivende.

Heterogene enums

Heterogene enums er enums som inneholder både numeriske og strengmedlemmer. For eksempel:

enum Resultat {
Suksess = "SUKSESS",
Feil = 0
}

Heterogene enums er nyttige når du har enum-medlemmer som krever forskjellige verdityper basert på hvert medlems spesifikke kontekst eller mening. Imidlertid TypeScript-dokumentasjon fraråder bruken av heterogene enums siden de introduserer kompleksitet som kan gjøre koden din mer feilutsatt.

Beregnet og konstant enum-medlemmer

Hvert enum-medlem har en verdi, som enten kan være konstant eller beregnet.

Konstante Enum-medlemmer

Et enum-medlem er konstant hvis det tilfredsstiller noen av betingelsene nedenfor.

  1. Det er det første medlemmet av enumet og har ingen initialisering.
  2. Den har ikke en initialisering, og det foregående enum-medlemmet var en numerisk konstant.
  3. Den initialiseres med et konstant enum-uttrykk.

I følge TypeScript-dokumentasjonen er et konstant enum-uttrykk en undergruppe av TypeScript-uttrykk som kan evalueres fullt ut på kompileringstidspunktet. For eksempel en streng eller en numerisk bokstav.

For eksempel er medlemmene av enumene i kodeblokken nedenfor alle konstante:

// CASE 1
enum Retning {
Opp,
Ned,
Venstre,
Ikke sant
}

// CASE 2
enum Ukedag {
mandag = 1,
Tirsdag,
Onsdag,
Torsdag,
fredag
}

// CASE 3
enum Sesong {
Vår = "VÅR",
Sommer = "SOMMER",
Høst = "HØST",
Vinter = "VINTER"
}

Når du transpilerer konstante enum-medlemmer til vanlig JavaScript, bruker den genererte koden deres bokstavelige verdier. Dette kan være gunstig for ytelsen og gjøre feilsøking enklere.

For eksempel, her er den transpilerte versjonen av sesongopptellingen:

var Årstid;
(funksjon (Årstid) {
Årstid["Vår"] = "VÅR";
Årstid["Sommer"] = "SOMMER";
Årstid["Høst"] = "HØST";
Årstid["Vinter"] = "VINTER";
})(Sesong || (Sesong = {}));

Beregnet enum medlemmer

Du kan bruke beregnede enum-medlemmer til å tilordne verdier til enum-medlemmer basert på uttrykk eller andre dynamiske beregninger. For eksempel:

enum Størrelse {
Liten = 1,
Medium = beregne størrelse(12),
Stor = beregne størrelse(5)
}

funksjonberegne størrelse(verdi: Antall): Antall{
komme tilbake verdi * 5;
}

konsoll.log (Størrelse. Stor)

De Størrelse enum har tre medlemmer: Liten, Medium, og Stor. Den tildeler eksplisitt verdien 1 til Small-medlemmet. De Medium og Stor medlemmer bruker en funksjon beregne størrelse å beregne verdiene deres under kjøring.

Når du arbeider med beregnede enum-medlemmer, er det viktig å merke seg at verdiene ikke er kjent før kjøretid. Dette kan introdusere mer kompleksitet og potensial kjøretidsfeil sammenlignet med enum medlemmer med konstante verdier.

For eksempel:

var Størrelse;
(funksjon (Størrelse) {
Størrelse[Størrelse["Liten"] = 1] = "Liten";
Størrelse[Størrelse["Medium"] = beregne størrelse(12)] = "Medium";
Størrelse[Størrelse["Stor"] = beregne størrelse(5)] = "Stor";
})(Størrelse || (Størrelse = {}));

konsoll.Logg(Størrelse.Stor)

Kodeblokken ovenfor er den transpilerte versjonen av Størrelse enum. Legg merke til hvordan TypeScript ikke inkluderer returverdiene fra calculateSize() i JavaScript-koden. I stedet inkluderer den det opprinnelige funksjonskallet slik at JavaScript bestemmer verdiene ved kjøring.

Få tilgang til Enum-verdier

Du kan få tilgang til verdiene til enum-medlemmer ved å bruke objektprikknotasjonen.

For eksempel:

enum Retning {
Opp = 0,
Ned = 1,
Venstre = 2,
Høyre = 3,
}

konsoll.log (Retning. Venstre) // 2

Omvendt kartlegging Numeriske oppslag

Omvendt kartlegging i numeriske enums refererer til muligheten til å hente det tilsvarende enum-medlemsnavnet fra verdien. Dette kan være spesielt nyttig når du arbeider med numeriske verdier, som du kanskje må dekode.

Som standard er enum-verdier i TypeScript tilordnet fremover, noe som betyr at du bare har tilgang til verdien knyttet til et navn. Du kan imidlertid utføre omvendt kartlegging manuelt for å hente enum-medlemmet basert på verdien.

For eksempel:

enum Retning {
Opp = 1,
Ned,
Venstre,
Ikke sant
}

funksjongetDirectionName(retningsverdi: Antall): streng{
// Omvendt kartlegging
konst retningsnavn = Retning[retningsverdi];
komme tilbake retningsnavn;
}

konsoll.log (getDirectionName(1)); // "Opp"
konsoll.log (getDirectionName(3)); // "Venstre"

Dette getDirectionName funksjonen utfører omvendt kartlegging ved å få tilgang til enum-medlemsnavnet ved å bruke verdien som en indeks. Funksjonen tar en retning Verdi som et argument og henter det tilsvarende enum-medlemsnavnet ved hjelp av Retning[directionValue].

Omvendt kartlegging kan være nyttig i scenarier der du har en numerisk verdi og trenger å bestemme det tilsvarende enum-medlemsnavnet. Det gir en praktisk måte å jobbe med oppsummeringer i både forover og bakover.

Det er mange bruksområder for Enums

Du kan bruke enums i ulike scenarier, for eksempel å håndtere brytersetninger, definere funksjonsparametere, kartlegge data og representere valg eller innstillinger.

Enten du trenger å representere et begrenset sett med alternativer eller administrere komplekse tilstandsoverganger, er enums i TypeScript et verdifullt verktøy for å forbedre klarheten og strukturen til koden din.