TypeScriptov nabrojani tip zgodan je način za pakiranje povezanih vrijednosti, s jasnim značenjem.
Enum ili nabrojani tip je podatkovna struktura koja vam omogućuje definiranje skupa imenovanih vrijednosti.
Enumi pružaju način predstavljanja fiksnog skupa vrijednosti kao konstanti. Oni mogu pomoći da vaš kod bude izražajniji i samodokumentirajući dajući smislena imena određenim vrijednostima. Ovdje ćete naučiti kako možete koristiti enume u TypeScriptu.
Stvaranje enuma
Enumi općenito predstavljaju fiksni broj opcija za danu vrijednost. Na primjer, enum koji predstavlja primarne boje može imati fiksne vrijednosti za crvenu, žutu i plavu.
Enumi predstavljaju podatke kao skup parova ključ/vrijednost poznatih kao članovi enuma. Ključ uvijek mora biti niz. Međutim, vrijednost—automatski povećavajući broj prema zadanim postavkama—može biti numerička, niz ili izračunata.
Možete stvoriti enum u jezik TypeScript koristiti nabrajanje ključna riječ. Pratite ga imenom enuma i parom vitičastih zagrada (
{}) koji sadrži članove enuma. Uobičajena JavaScript konvencija imenovanja navodi da imena enuma trebaju počinjati velikim slovom.nabrajanje Smjer {
gore,
dolje,
Lijevo,
Pravo
}
Ovaj primjer sadrži enum pod nazivom Smjer. Enum ima člana koji predstavlja svaki smjer: gore, dolje, lijevo i desno.
Budući da ovaj kod ne navodi vrijednost za svaki od ključeva, TypeScript će automatski dodijeliti vrijednosti. Prvi član, Up, imat će vrijednost 0. Svaki preostali član će imati vrijednost za 1 veću od vrijednosti prethodnog člana. Ovo možete izričito deklarirati ako vam je teško zapamtiti:
nabrajanje Smjer {
Gore = 0,
Dolje = 1,
Lijevo = 2,
Desno = 3,
}
Ili možete eksplicitno deklarirati različite vrijednosti, ostavljajući nedeklarirane vrijednosti da se nastave povećavati kao prije:
nabrajanje Status {
Aktivan = 9,
neaktivan, // 10
}
U ovom primjeru, Neaktivni član ima vrijednost 10. Ovo se ponašanje odnosi na popise koji imaju samo numeričke vrijednosti, a ne one s nizovima ili heterogenim članovima.
Različite vrste enuma
Enumi u TypeScriptu imaju implicitni tip koji se temelje na vrsti vrijednosti koje imaju njihovi članovi. Najčešći tip je numerički enum, čije ponašanje pokriva prethodni odjeljak, ali postoje dvije varijacije.
String enumi
String enum je enum u kojem su svi njegovi članovi nizovi. Za razliku od numeričkih enuma, gdje se vrijednosti automatski dodjeljuju, svaki član morate inicijalizirati nizom:
nabrajanje Primarne boje {
Crveno = "CRVENA",
Žuta = "ŽUTA BOJA",
Plava = "PLAVI"
}
Iako nizovi enuma nemaju svojstva automatskog povećanja, možda će imati više smisla ako ih serijalizirate. Njihove vrijednosti i dalje trebaju biti opisne, bez imena članova, dok skup numeričkih vrijednosti ne mora biti samoopisujući.
Heterogeni enumi
Heterogeni enumi su enumi koji sadrže i numeričke i nizove. Na primjer:
nabrajanje Rezultat {
Uspjeh = "USPJEH",
Neuspjeh = 0
}
Heterogeni enumi korisni su kada imate članove enuma koji zahtijevaju različite tipove vrijednosti na temelju specifičnog konteksta ili značenja svakog člana. Međutim TypeScript dokumentacija obeshrabruje korištenje heterogenih enuma jer oni unose složenost koja može vaš kod učiniti sklonijim pogreškama.
Izračunati i konstantni članovi enuma
Svaki član enuma ima vrijednost koja može biti konstantna ili izračunata.
Konstantni članovi enuma
Član enuma je konstantan ako zadovoljava bilo koji od uvjeta u nastavku.
- To je prvi član enuma i nema inicijalizator.
- Nema inicijalizator, a prethodni član enum bio je numerička konstanta.
- Inicijalizira se konstantnim enum izrazom.
Prema TypeScript dokumentaciji, konstantni enum izraz je podskup TypeScript izraza koji se mogu u potpunosti evaluirati tijekom kompilacije. Na primjer, niz ili numerički literal.
Na primjer, svi članovi enuma u bloku koda u nastavku su konstantni:
// SLUČAJ 1
nabrajanje Smjer {
gore,
dolje,
Lijevo,
Pravo
}// SLUČAJ 2
nabrajanje radni dan {
ponedjeljak = 1,
Utorak,
Srijeda,
Četvrtak,
petak
}
// SLUČAJ 3
nabrajanje sezona {
Proljeće = "PROLJEĆE",
Ljeto = "LJETO",
Jesen = "JESEN",
Zima = "ZIMA"
}
Kada transpilirate konstantne enum članove u običan JavaScript, generirani kod koristi njihove literalne vrijednosti. To može biti korisno za performanse i olakšati otklanjanje pogrešaka.
Na primjer, ovdje je prevedena verzija enuma Season:
var Sezona;
(funkcija (Sezona) {
Sezona["Proljeće"] = "PROLJEĆE";
Sezona["Ljeto"] = "LJETO";
Sezona["Jesen"] = "JESEN";
Sezona["Zima"] = "ZIMA";
})(Sezona || (Sezona = {}));
Izračunati članovi enuma
Možete koristiti izračunate enum članove za dodjelu vrijednosti enum članovima na temelju izraza ili drugih dinamičkih izračuna. Na primjer:
nabrajanje Veličina {
Mali = 1,
Medij = izračunaj veličinu(12),
Large = izračunaj veličinu(5)
}funkcijaizračunati Veličinu(vrijednost: broj): broj{
povratak vrijednost * 5;
}
konzola.log (veličina. velika)
The Veličina enum ima tri člana: Mali, Srednji, i velika. Izričito dodjeljuje vrijednost 1 Small članu. The Srednji i velika članovi koriste funkciju izračunati Veličinu za izračunavanje njihovih vrijednosti tijekom izvođenja.
Kada radite s izračunatim članovima enuma, važno je napomenuti da vrijednosti nisu poznate do vremena izvođenja. To može dovesti do veće složenosti i potencijala runtime pogreške u usporedbi s članovima enuma s konstantnim vrijednostima.
Na primjer:
var Veličina;
(funkcija (Veličina) {
Veličina[Veličina["Mali"] = 1] = "Mali";
Veličina[Veličina["Srednji"] = izračunaj veličinu(12)] = "Srednji";
Veličina[Veličina["Veliki"] = izračunaj veličinu(5)] = "Veliki";
})(Veličina || (Veličina = {}));
konzola.log(Veličina.Veliki)
Gornji blok koda je transpilirana verzija Veličina nabrajanje. Primijetite kako TypeScript ne uključuje povratne vrijednosti iz izračunaVeličine() u JavaScript kodu. Umjesto toga, uključuje izvorni poziv funkcije tako da JavaScript određuje vrijednosti tijekom izvođenja.
Pristup enum vrijednostima
Možete pristupiti vrijednostima članova enuma koristeći notaciju objekta točka.
Na primjer:
nabrajanje Smjer {
Gore = 0,
Dolje = 1,
Lijevo = 2,
Desno = 3,
}
konzola.log (Smjer. Lijevo) // 2
Obrnuto preslikavanje numeričkih enuma
Obrnuto preslikavanje u numeričkim enumima odnosi se na mogućnost dohvaćanja odgovarajućeg imena člana enuma iz njegove vrijednosti. To može biti osobito korisno kada radite s numeričkim vrijednostima koje ćete možda morati dekodirati.
Prema zadanim postavkama, enum vrijednosti u TypeScriptu mapirane su unaprijed, što znači da možete pristupiti samo vrijednosti pridruženoj imenu. Međutim, možete ručno izvesti obrnuto mapiranje da biste dohvatili enum član na temelju njegove vrijednosti.
Na primjer:
nabrajanje Smjer {
Gore = 1,
dolje,
Lijevo,
Pravo
}funkcijagetDirectionName(smjerVrijednost: broj): niz{
// Obrnuto preslikavanje
konst imesmjera = Smjer[vrijednostsmjera];
povratak imesmjera;
}
konzola.log (getDirectionName(1)); // "gore"
konzola.log (getDirectionName(3)); // "Lijevo"
Ovaj getDirectionName funkcija izvodi obrnuto mapiranje pristupanjem imenu člana enuma koristeći njegovu vrijednost kao indeks. Funkcija zauzima a smjerVrijednost kao argument i dohvaća odgovarajuće ime člana enuma pomoću Smjer [directionValue].
Obrnuto mapiranje može biti zgodno u scenarijima u kojima imate numeričku vrijednost i trebate odrediti odgovarajuće ime člana enuma. Omogućuje prikladan način rada s enumima u smjeru naprijed i nazad.
Postoje mnoge primjene enuma
Enume možete koristiti u raznim scenarijima, kao što je rukovanje izjavama switch, definiranje parametara funkcije, mapiranje podataka i predstavljanje izbora ili postavki.
Bilo da trebate predstaviti konačan skup opcija ili upravljati složenim prijelazima stanja, enumi u TypeScriptu vrijedan su alat za poboljšanje jasnoće i strukture vašeg koda.