TypeScript fungerar som en utökning av JavaScript, med syfte att möjliggöra utveckling av kod med stark typkontroll.
Genom att använda TypeScript kan man identifiera och åtgärda fel tidigare i utvecklingsprocessen. En central funktion i TypeScript är Enums, en populär konstruktion som bidrar till ökad kodsäkerhet.
I den här texten kommer vi att utforska Enums i detalj, inklusive hur de skapas, används och andra viktiga aspekter.
Vad är en Enum?
Enum är en förkortning av ”enumerated type”, eller uppräkningsbar typ. En sådan typ definieras av de specifika värden som en variabel av den typen kan anta. Dessa enskilda värden kallas ofta för medlemmar eller element.
Vi kommer i denna artikel att referera till dem som medlemmar. Enums är inte exklusivt för TypeScript, utan finns även i andra programmeringsspråk. Genom att använda Enums kan vi uppnå bättre typsäkerhet i TypeScript-applikationer.
Läs även: De bästa TypeScript-biblioteken och runtime-miljöerna för utvecklare
Varför använda Enums?
Uppräkningar ger oss möjlighet att definiera de exakta värden som en variabel kan ha. De gör det även möjligt att specificera vilka värden ett funktionsargument kan acceptera. Detta säkerställer att utvecklare använder förväntade värden för variabler och funktionsargument, vilket minskar risken för fel och leder till säkrare och mer robust kod.
Förutsättningar för att arbeta med Enums
Denna guide visar hur man hanterar enums i TypeScript. För att följa exemplen bör du ha en fungerande TypeScript-miljö.
Detta innebär att du behöver Node.js installerat för att kunna köra din JavaScript-kod. Om du saknar TypeScript, finns det guider som visar hur du installerar det.
Alternativt kan ts-node användas för att direkt kompilera och köra skript. Även om detta är metoden som används i artikeln, rekommenderas en fullständig TypeScript-installation för större projekt. För att köra ett skript med ts-node används följande kommando:
npx ts-node <scriptnamn>
Artikeln förutsätter även grundläggande kunskaper i JavaScript och TypeScript.
Arbeta med en enkel enum
Hur man skapar en enkel enum
Enums i TypeScript skapas med hjälp av nyckelordet `enum`. Namnet på uppräkningen följer, därefter en lista över de medlemmar som uppräkningen ska innehålla. Exemplet nedan visar hur en enum för de fyra väderstrecken kan se ut:
enum Riktning { Norr, Öster, Söder, Väster }
Observera att medlemmarna inte omges av citattecken, vilket indikerar att de inte är strängar.
Hur man använder en enkel enum
Ett enum-värde kan tilldelas en variabel på följande sätt:
const riktning: Riktning = Riktning.Norr;
Eftersom variabeln tilldelas direkt vid deklarationen kan TypeScript själv identifiera datatypen. Därför kan typdeklarationen utelämnas och koden kan istället se ut så här:
const riktning = Riktning.Norr;
För att ta reda på vilket värde variabeln `riktning` har, kan vi skriva ut den i konsolen:
console.log(riktning);
Utskriften blir då:
0
Variabeln `riktning` har värdet noll trots att vi tilldelade den värdet `Riktning.Norr`. Anledningen är att varje medlem i en enum tilldelas ett numeriskt värde, där den första medlemmen får värdet 0, den andra 1, och så vidare. Detta illustreras av följande exempel:
console.log(Riktning.Norr, Riktning.Öster, Riktning.Söder, Riktning.Väster)
Följaktligen kan man kontrollera om variabeln `riktning` motsvarar `Norr` genom att jämföra den med värdet 0. Exempelvis:
// Jämför med värdet 0 let ärNorr = riktning == 0; // Skriv ut resultatet console.log(ärNorr);
Eftersom `Riktning.Norr` har värdet 0, är det mer lämpligt att jämföra variabeln med `Riktning.Norr` istället för siffran 0:
// Kontrollera om riktningen är Norr ärNorr = riktning == Riktning.Norr; // Skriv ut resultatet console.log(ärNorr);
Detta är ett grundläggande exempel på hur man använder enums. Det finns dock fler möjligheter, vilket vi ska utforska vidare. Nästa avsnitt handlar om att använda egna, anpassade värden.
Arbeta med anpassade värden
När en enum skapas tilldelar TypeScript automatiskt numeriska värden till medlemmarna, med start från noll. Men om man vill att medlemmarna ska ha egna, specifika värden, kan detta göras genom att tilldela dem värden manuellt. Ett exempel:
enum Stjärnbetyg { MycketDåligt = 1, Dåligt = 2, Medel = 3, Bra = 4, Utmärkt = 5 }
Alternativt kan man göra på följande sätt:
enum Stjärnbetyg { MycketDåligt = 1, Dåligt, Medel, Bra, Utmärkt }
I detta fall får den första medlemmen värdet 1, och efterföljande medlemmar får automatiskt ökande värden. Således får `Dåligt` värdet 2, `Medel` får 3, och så vidare.
Värdena i en enum behöver inte alltid vara numeriska, vilket vi ska se senare. Med numeriska värden fungerar de som vanliga tal.
console.log(typeof Stjärnbetyg.Medel);
Detta ger utskriften ”number”, vilket innebär att alla numeriska operationer, så som jämförelser, kan användas:
console.log(Stjärnbetyg.Utmärkt > Stjärnbetyg.Medel)
Detta ger utskriften ”true”.
Använda strängar som anpassade värden
Som tidigare nämnts kan enum-värden även vara strängar istället för bara siffror. Så här gör man:
enum Val { RödPiller = "Vet Allt" BlåPiller = "Vet Inget" }
I detta fall fungerar enum-värdena på samma sätt som tidigare. Eftersom värdena är strängar, kan strängoperationer användas istället för numeriska operationer.
Heterogena uppräkningar
Det är även möjligt att blanda strängvärden och numeriska värden i samma enum. Detta är inte särskilt användbart, men ändå möjligt.
enum Blandat { Första = "Sträng" Andra = 2 }
Slutord
I den här artikeln har vi beskrivit vad enums är i TypeScript och varför de är viktiga. Vi har även gått igenom vilka olika typer av värden som medlemmarna kan ha.
Kolla gärna in vår artikel om Typ vs. Interface i TypeScript.