TypeScripts opregnede type er en praktisk måde at pakke relaterede værdier på, med klar betydning.

En enum eller en optalt type er en datastruktur, der giver dig mulighed for at definere et sæt navngivne værdier.

Enums giver en måde at repræsentere et fast sæt værdier som konstanter. De kan hjælpe med at gøre din kode mere udtryksfuld og selvdokumenterende ved at give meningsfulde navne til specifikke værdier. Her lærer du, hvordan du kan bruge enums i TypeScript.

Oprettelse af en enum

Enums repræsenterer generelt et fast antal muligheder for en given værdi. For eksempel kan en enum, der repræsenterer primærfarver, have faste værdier for rød, gul og blå.

Enums repræsenterer data som et sæt nøgle/værdi-par kendt som enum-medlemmer. Nøglen skal altid være en streng. Værdien – et automatisk stigende tal som standard – kan dog være numerisk, en streng eller beregnet.

Du kan oprette en enum i TypeScript-sproget bruger enum søgeord. Følg den med enummets navn og et par krøllede seler ({}) indeholdende enum-medlemmerne.

instagram viewer
En almindelig JavaScript-navngivningskonvention angiver, at enum-navne skal starte med stort bogstav.

enum Retning {
Op,
Ned,
Venstre,
Højre
}

Dette eksempel har en enum kaldet Retning. Enumet har et medlem, der repræsenterer hver retning: Op, Ned, Venstre og Højre.

Da denne kode ikke angiver en værdi for hver af nøglerne, vil TypeScript automatisk tildele værdier. Det første medlem, Up, vil have en værdi på 0. De resterende medlemmer vil hver have en værdi 1 større end det tidligere medlems. Du kan udtrykkeligt erklære dette, hvis du har svært ved at huske:

enum Retning {
Op = 0,
Ned = 1,
Venstre = 2,
Højre = 3,
}

Eller du kan eksplicit erklære forskellige værdier og lade ikke-deklarerede værdier fortsætte med at stige som før:

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

I dette eksempel har det inaktive medlem en værdi på 10. Denne adfærd gælder for enums, der kun har numeriske værdier, ikke dem med streng eller heterogene medlemmer.

De forskellige typer af enum

Enums i TypeScript har en implicit type, de baserer på den type værdier, deres medlemmer har. Den mest almindelige type er den numeriske enum, hvis adfærd det foregående afsnit dækker, men der er to variationer.

Strengoptegnelser

En strengenum er en enum, hvor alle dens medlemmer er strenge. I modsætning til numeriske enums, hvor værdier automatisk tildeles, skal du initialisere hvert medlem med en streng:

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

Selvom strengenums ikke har egenskaber for automatisk inkrementering, kan de give mere mening, hvis du serialiserer dem. Deres værdier skal stadig være beskrivende uden medlemsnavne, mens et sæt numeriske værdier muligvis ikke er selvbeskrivende.

Heterogene Enums

Heterogene enums er enums, der indeholder både numeriske og strenge medlemmer. For eksempel:

enum Resultat {
Succes = "SUCCES",
Fejl = 0
}

Heterogene enums er nyttige, når du har enum-medlemmer, der kræver forskellige værdityper baseret på hvert medlems specifikke kontekst eller betydning. Imidlertid TypeScript dokumentation fraråder brugen af ​​heterogene enums, da de introducerer kompleksitet, der kan gøre din kode mere fejltilbøjelig.

Beregnet og konstant enum medlemmer

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

Konstante Enum Medlemmer

Et enum-medlem er konstant, hvis det opfylder nogen af ​​nedenstående betingelser.

  1. Det er det første medlem af enum og har ingen initializer.
  2. Den har ikke en initialisering, og det foregående enum-medlem var en numerisk konstant.
  3. Det initialiseres med et konstant enum-udtryk.

Ifølge TypeScript-dokumentationen er et konstant enum-udtryk en undergruppe af TypeScript-udtryk, der kan evalueres fuldt ud på kompileringstidspunktet. For eksempel en streng eller et numerisk bogstav.

For eksempel er medlemmerne af enumsene i kodeblokken nedenfor alle konstante:

// CASE 1
enum Retning {
Op,
Ned,
Venstre,
Højre
}

// CASE 2
enum Ugedag {
mandag = 1,
Tirsdag,
Onsdag,
Torsdag,
Fredag
}

// CASE 3
enum Sæson {
Forår = "FORÅR",
Sommer = "SOMMER",
Efterår = "EFTERÅR",
Vinter = "VINTER"
}

Når du transpilerer konstante enum-medlemmer til almindelig JavaScript, bruger den genererede kode deres bogstavelige værdier. Dette kan være gavnligt for ydeevnen og gøre fejlfinding lettere.

For eksempel, her er den transpilerede version af sæsonens oversigt:

var Sæson;
(fungere (Sæson) {
Sæson["Forår"] = "FORÅR";
Sæson["Sommer"] = "SOMMER";
Sæson["Efterår"] = "EFTERÅR";
Sæson["Vinter"] = "VINTER";
})(Sæson || (Sæson = {}));

Beregnet enum medlemmer

Du kan bruge beregnede enum-medlemmer til at tildele værdier til enum-medlemmer baseret på udtryk eller andre dynamiske beregninger. For eksempel:

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

fungereberegne størrelse(værdi: nummer): nummer{
Vend tilbage værdi * 5;
}

konsol.log (Størrelse. Stor)

Det Størrelse enum har tre medlemmer: Lille, Medium, og Stor. Det tildeler eksplicit værdien 1 til det lille medlem. Det Medium og Stor medlemmer bruger en funktion beregne størrelse at beregne deres værdier under kørsel.

Når du arbejder med beregnede enum-medlemmer, er det vigtigt at bemærke, at værdierne ikke er kendt før runtime. Dette kan introducere mere kompleksitet og potentiale runtime fejl sammenlignet med enum medlemmer med konstante værdier.

For eksempel:

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

konsol.log(Størrelse.Stor)

Kodeblokken ovenfor er den transpilerede version af Størrelse enum. Bemærk, hvordan TypeScript ikke inkluderer returværdierne fra calculateSize() i JavaScript-koden. I stedet inkluderer det det originale funktionskald, så JavaScript bestemmer værdierne ved kørsel.

Adgang til Enum-værdier

Du kan få adgang til værdierne for enum-medlemmer ved hjælp af objekt-punktnotationen.

For eksempel:

enum Retning {
Op = 0,
Ned = 1,
Venstre = 2,
Højre = 3,
}

konsol.log (Retning. Venstre) // 2

Omvendt kortlægning numeriske enums

Omvendt kortlægning i numeriske enums refererer til evnen til at hente det tilsvarende enum-medlemsnavn fra dets værdi. Dette kan være særligt nyttigt, når du arbejder med numeriske værdier, som du muligvis skal afkode.

Som standard er enum-værdier i TypeScript viderekoblet, hvilket betyder, at du kun kan få adgang til den værdi, der er knyttet til et navn. Du kan dog manuelt udføre omvendt kortlægning for at hente enum-medlemmet baseret på dets værdi.

For eksempel:

enum Retning {
Op = 1,
Ned,
Venstre,
Højre
}

fungeregetDirectionName(retningsværdi: nummer): snor{
// Omvendt kortlægning
konst retningsnavn = Retning[retningVærdi];
Vend tilbage retningsnavn;
}

konsol.log (getDirectionName(1)); // "Op"
konsol.log (getDirectionName(3)); // "Venstre"

Det her getDirectionName funktion udfører omvendt kortlægning ved at få adgang til enum-medlemsnavnet ved at bruge dets værdi som et indeks. Funktionen tager en retningVærdi som et argument og henter det tilsvarende enum-medlemsnavn vha Retning[directionValue].

Omvendt kortlægning kan være praktisk i scenarier, hvor du har en numerisk værdi og skal bestemme det tilsvarende enum-medlemsnavn. Det giver en bekvem måde at arbejde med enums i både fremadgående og baglæns retning.

Der er mange anvendelser af Enums

Du kan bruge enums i forskellige scenarier, såsom håndtering af switch-sætninger, definition af funktionsparametre, kortlægning af data og repræsentation af valg eller indstillinger.

Uanset om du skal repræsentere et begrænset sæt af muligheder eller administrere komplekse tilstandsovergange, er enums i TypeScript et værdifuldt værktøj til at forbedre klarheden og strukturen af ​​din kode.