TypeScripti loetletud tüüp on mugav viis seotud väärtuste pakendamiseks selge tähendusega.

Loend ehk loenditüüp on andmestruktuur, mis võimaldab määratleda nimeliste väärtuste komplekti.

Enumid võimaldavad esitada fikseeritud väärtuste komplekti konstantidena. Need võivad aidata muuta teie koodi väljendusrikkamaks ja ennast dokumenteerivamaks, andes konkreetsetele väärtustele tähendusrikkad nimed. Siit saate teada, kuidas saate TypeScriptis enumeid kasutada.

Enumi koostamine

Enumid esindavad üldjuhul kindlat arvu valikuid antud väärtuse jaoks. Näiteks võib põhivärve esindaval loendil olla punase, kollase ja sinise jaoks fikseeritud väärtused.

Enumid esindavad andmeid võtme/väärtuste paaride kogumina, mida nimetatakse loendi liikmeteks. Võti peab alati olema nöör. Väärtus – vaikimisi automaatselt suurenev arv – võib aga olla numbriline, string või arvutatud.

Saate luua loendi TypeScripti keel kasutades enum märksõna. Järgige seda loendi nime ja paari lokkis traksidega ({}), mis sisaldab enumi liikmeid.

instagram viewer
Levinud JavaScripti nimetamise tava sätestab, et enum-nimed peaksid algama suure algustähega.

enum suund {
Üles,
alla,
vasakule,
Õige
}

See näide sisaldab loendit nimega Suund. Nimekirjas on liige, mis esindab iga suunda: üles, alla, vasakule ja paremale.

Kuna see kood ei määra iga võtme jaoks väärtust, määrab TypeScript väärtused automaatselt. Esimese liikme Up väärtus on 0. Ülejäänud liikmete väärtus on 1 võrra suurem kui eelmisel liikmel. Võite selle selgesõnaliselt deklareerida, kui teil on raske meeles pidada:

enum suund {
Üles = 0,
Alla = 1,
Vasak = 2,
Õige = 3,
}

Või saate selgesõnaliselt deklareerida erinevad väärtused, jättes deklareerimata väärtused jätkama suurendamist nagu varem:

enum Olek {
Aktiivne = 9,
mitteaktiivne, // 10
}

Selles näites on passiivse liikme väärtus 10. See käitumine kehtib enumite kohta, millel on ainult arvväärtused, mitte aga stringi- või heterogeensete liikmetega loendite puhul.

Enumi erinevad tüübid

TypeScripti enumitel on kaudne tüüp, mis põhineb nende liikmete väärtuste tüübil. Kõige tavalisem tüüp on numbriline enum, mille käitumist käsitleb eelmine jaotis, kuid sellel on kaks variatsiooni.

String Enums

Stringenum on loend, milles kõik selle liikmed on stringid. Erinevalt numbrilistest loenditest, kus väärtused määratakse automaatselt, peate iga liikme initsialiseerima stringiga:

enum PrimaryColors {
Punane = "PUNANE",
Kollane = "KOLLANE",
Sinine = "SININE"
}

Ehkki stringi loenditel pole automaatse suurendamise omadusi, võivad need olla mõistlikumad, kui need järjestada. Nende väärtused peaksid siiski olema kirjeldavad, ilma liikmete nimedeta, samas kui arvväärtuste komplekt ei pruugi olla ennast kirjeldav.

Heterogeensed enumid

Heterogeensed enumid on enumid, mis sisaldavad nii arv- kui ka stringliikmeid. Näiteks:

enum Tulemus {
Edu = "EDU",
Ebaõnnestumine = 0
}

Heterogeensed loendid on kasulikud, kui teil on loendi liikmeid, mis nõuavad iga liikme konkreetse konteksti või tähenduse põhjal erinevaid väärtustüüpe. Siiski, TypeScripti dokumentatsioon ei soovita heterogeensete enumite kasutamist, kuna need muudavad teie koodi veaohtlikumaks.

Arvutatud ja püsiloendi liikmed

Igal loendi liikmel on väärtus, mis võib olla kas konstantne või arvutatud.

Pidevad Enumi liikmed

Nimekirja liige on konstantne, kui see vastab mõnele alltoodud tingimusele.

  1. See on loendi esimene liige ja sellel pole initsialiseerijat.
  2. Sellel ei ole initsialiseerijat ja eelnev loendi liige oli numbriline konstant.
  3. See lähtestatakse konstantse enum-avaldisega.

TypeScripti dokumentatsiooni kohaselt on konstantse loendi avaldis TypeScripti avaldiste alamhulk, mida saab kompileerimise ajal täielikult hinnata. Näiteks string või numbriline literaal.

Näiteks alloleva koodiploki enumite liikmed on kõik konstantsed:

// 1. JUHTUM
enum suund {
Üles,
alla,
vasakule,
Õige
}

// JUHTUM 2
enum nädalapäev {
Esmaspäev = 1,
teisipäeval,
kolmapäeval,
neljapäeval,
reedel
}

// JUHTUM 3
enum hooaeg {
Kevad = "KEVAD",
Suvi = "SUVI",
Sügis = "SÜGIS",
Talv = "TALV"
}

Kui muudate konstantse enumi liikmed lihtsaks JavaScriptiks, kasutab genereeritud kood nende sõnalisi väärtusi. See võib jõudlusele kasulik olla ja silumise lihtsamaks muuta.

Näiteks siin on hooaja loendi ülekantud versioon:

var Hooaeg;
(funktsiooni (Hooaeg) {
hooaeg["Kevad"] = "KEVAD";
hooaeg["Suvi"] = "SUVI";
hooaeg["Sügis"] = "SÜGIS";
hooaeg["Talv"] = "TALV";
})(Hooaeg || (Hooaeg = {}));

Arvutatud loendi liikmed

Arvutatud loendiliikmete abil saate määrata loendi liikmetele väärtusi avaldiste või muude dünaamiliste arvutuste põhjal. Näiteks:

enum Suurus {
Väike = 1,
Keskmine = arvutaSuurus(12),
Suur = arvutaSuurus(5)
}

funktsiooniarvuta suurus(väärtus: number): number{
tagasi väärtus * 5;
}

konsool.log (Suurus. suur)

The Suurus enum koosneb kolmest liikmest: Väike, Keskmine, ja Suur. See määrab selgesõnaliselt väikesele liikmele väärtuse 1. The Keskmine ja Suur liikmed kasutavad funktsiooni arvuta suurus nende väärtuste arvutamiseks käitusajal.

Arvutatud loendiliikmetega töötades on oluline arvestada, et väärtused on teada alles käitusajal. See võib tuua kaasa suurema keerukuse ja potentsiaali käitusaegsed vead võrreldes püsiväärtustega enum liikmetega.

Näiteks:

var Suurus;
(funktsiooni (Suurus) {
Suurus[Suurus["Väike"] = 1] = "Väike";
Suurus[Suurus["Keskmine"] = arvuta suurus(12)] = "Keskmine";
Suurus[Suurus["Suur"] = arvuta suurus(5)] = "Suur";
})(Suurus || (Suurus = {}));

konsool.log(Suurus.Suured)

Ülaltoodud koodiplokk on selle transpileeritud versioon Suurus enum. Pange tähele, kuidas TypeScript ei sisalda JavaScripti koodis atribuudi CalculateSize() tagastusväärtusi. Selle asemel sisaldab see algset funktsioonikutset, nii et JavaScript määrab väärtused käitusajal.

Juurdepääs Enum väärtustele

Enum-liikmete väärtustele pääsete juurde objekti punktitähistusega.

Näiteks:

enum suund {
Üles = 0,
Alla = 1,
Vasak = 2,
Õige = 3,
}

konsool.log (Suund. vasakul) // 2

Numbriliste enumite pöördkaardistamine

Pöördvastastus numbrilistes loendites viitab võimalusele tuua selle väärtusest vastav loendi liikme nimi. See võib olla eriti kasulik, kui töötate arvväärtustega, mida võib tekkida vajadus dekodeerida.

Vaikimisi on TypeScripti loendi väärtused edasi vastendatud, mis tähendab, et pääsete juurde ainult nimega seotud väärtusele. Siiski saate käsitsi sooritada pöördvastenduse, et tuua loendi liige selle väärtuse alusel.

Näiteks:

enum suund {
Üles = 1,
alla,
vasakule,
Õige
}

funktsioonigetDirectionName(directionValue: number): string{
// Vastupidine kaardistamine
konst suunaNimi = Suund[suunaVäärtus];
tagasi suunanimi;
}

konsool.log (getDirectionName(1)); // "Üles"
konsool.log (getDirectionName(3)); // "Vasakule"

See getDirectionName funktsioon teostab pöördvastenduse, pääsedes juurde loendi liikme nimele, kasutades selle väärtust indeksina. Funktsioon võtab a suunaVäärtus argumendina ja otsib vastava loendi liikme nime kasutades Direction[directionValue].

Vastupidine vastendamine võib olla mugav stsenaariumide korral, kus teil on arvväärtus ja peate määrama vastava loendi liikme nime. See pakub mugavat viisi enumitega töötamiseks nii edasi- kui ka tagasisuunas.

Enumil on palju rakendusi

Enumeid saate kasutada mitmesugustes stsenaariumides, näiteks lülitilausete käsitlemisel, funktsiooniparameetrite määratlemisel, andmete vastendamisel ning valikute või sätete esitamisel.

Olenemata sellest, kas teil on vaja esitada piiratud valikute kogum või hallata keerulisi olekuüleminekuid, on TypeScripti enumid väärtuslik tööriist koodi selguse ja struktuuri parandamiseks.