Oštevilčeni tip TypeScript je priročen način za pakiranje povezanih vrednosti z jasnim pomenom.
Enum ali oštevilčen tip je podatkovna struktura, ki vam omogoča definiranje nabora poimenovanih vrednosti.
Enumi nudijo način za predstavitev fiksnega niza vrednosti kot konstant. Pomagajo lahko narediti vašo kodo bolj izrazno in samodokumentirano, tako da dajo smiselna imena določenim vrednostim. Tukaj boste izvedeli, kako lahko uporabite enume v TypeScript.
Ustvarjanje enuma
Enumi na splošno predstavljajo fiksno število možnosti za dano vrednost. Enum, ki predstavlja primarne barve, ima lahko na primer fiksne vrednosti za rdečo, rumeno in modro.
Enumi predstavljajo podatke kot niz parov ključ/vrednost, znan kot enum člani. Ključ mora biti vedno niz. Vendar pa je vrednost – privzeto samodejno naraščajoče število – lahko številska, niz ali izračunana.
Enum lahko ustvarite v jezik TypeScript uporabljati enum ključna beseda. Sledi mu ime enuma in par zavitih oklepajev ({}), ki vsebuje člane enum. Običajna konvencija o poimenovanju JavaScript
navaja, da se morajo imena enumov začeti z veliko začetnico.enum Smer {
gor,
dol,
levo,
Prav
}
Ta primer vsebuje enum, imenovan Smer. Enum ima člana, ki predstavlja vsako smer: gor, dol, levo in desno.
Ker ta koda ne določa vrednosti za vsakega od ključev, bo TypeScript samodejno dodelil vrednosti. Prvi član, Up, bo imel vrednost 0. Vsak preostali član bo imel vrednost za 1 večjo od vrednosti prejšnjega člana. To lahko izrecno izjavite, če si težko zapomnite:
enum Smer {
Gor = 0,
Dol = 1,
Levo = 2,
Desno = 3,
}
Lahko pa izrecno deklarirate različne vrednosti, pri čemer pustite neprijavljene vrednosti, da se še naprej povečujejo kot prej:
enum Stanje {
Aktivno = 9,
neaktiven, // 10
}
V tem primeru ima neaktivni član vrednost 10. To vedenje velja za enume, ki imajo samo številske vrednosti, ne pa za tiste z nizom ali heterogenimi člani.
Različne vrste enum
Enumi v TypeScriptu imajo implicitni tip, ki temelji na vrsti vrednosti, ki jih imajo njihovi člani. Najpogostejši tip je numerični enum, katerega vedenje pokriva prejšnji razdelek, vendar obstajata dve različici.
Enume nizov
Niz enum je enum, v katerem so vsi njegovi člani nizi. Za razliko od številskih enumov, kjer so vrednosti samodejno dodeljene, morate vsakega člana inicializirati z nizom:
enum PrimaryColors {
Rdeča = "RDEČA",
Rumena = "RUMENA",
Modra = "MODR"
}
Čeprav naštevanja nizov nimajo lastnosti samodejnega povečanja, so lahko bolj smiselna, če jih serializirate. Njihove vrednosti morajo biti še vedno opisne, brez imen članov, medtem ko niz številskih vrednosti morda ne bo samoopisen.
Heterogeni enumi
Heterogeni enumi so enumi, ki vsebujejo številske in nizovne člane. Na primer:
enum Rezultat {
Uspeh = "USPEH",
Neuspeh = 0
}
Heterogena naštevanja so uporabna, če imate člane naštevanja, ki zahtevajo različne vrste vrednosti glede na specifičen kontekst ali pomen vsakega člana. Vendar pa je Dokumentacija TypeScript odsvetuje uporabo heterogenih enumov, saj predstavljajo zapletenost, zaradi katere je lahko vaša koda bolj nagnjena k napakam.
Izračunani in konstantni člani Enum
Vsak član enum ima vrednost, ki je lahko konstantna ali izračunana.
Stalni člani Enum
Član enum je konstanten, če izpolnjuje katerega koli od spodnjih pogojev.
- Je prvi član enum in nima inicializatorja.
- Nima inicializatorja in predhodni enum član je bila številska konstanta.
- Inicializira se s konstantnim izrazom enum.
V skladu z dokumentacijo TypeScript je stalni izraz enum podmnožica izrazov TypeScript, ki jih je mogoče v celoti ovrednotiti med prevajanjem. Na primer niz ali numerični literal.
Na primer, vsi člani enumov v bloku kode spodaj so konstantni:
// PRIMER 1
enum Smer {
gor,
dol,
levo,
Prav
}// PRIMER 2
enum dan v tednu {
ponedeljek = 1,
torek,
sreda,
četrtek,
Petek
}
// PRIMER 3
enum Sezona {
Pomlad = "POMLAD",
Poletje = "POLETJE",
Jesen = "JESEN",
Zima = "ZIMA"
}
Ko konstantne člane enum prevedete v navaden JavaScript, ustvarjena koda uporablja njihove dobesedne vrednosti. To je lahko koristno za delovanje in olajša odpravljanje napak.
Na primer, tukaj je prevedena različica enuma Season:
var Sezona;
(funkcijo (Sezona) {
Sezona["pomlad"] = "POMLAD";
Sezona["poletje"] = "POLETJE";
Sezona["Jesen"] = "JESEN";
Sezona["Zima"] = "ZIMA";
})(Sezona || (Sezona = {}));
Izračunani člani Enum
Izračunane člane enum lahko uporabite za dodeljevanje vrednosti članom enum na podlagi izrazov ali drugih dinamičnih izračunov. Na primer:
enum Velikost {
Majhen = 1,
Srednje = izračunajVelikost(12),
Velika = izračunajVelikost(5)
}funkcijoizračunajVelikost(vrednost: število): število{
vrnitev vrednost * 5;
}
konzola.log (velikost. velika)
The Velikost enum ima tri člane: majhna, Srednje, in Velik. Izrecno dodeli vrednost 1 malemu članu. The Srednje in Velik člani uporabljajo funkcijo izračunajVelikost za izračun njihovih vrednosti med izvajanjem.
Ko delate z izračunanimi člani enum, je pomembno upoštevati, da vrednosti niso znane do časa izvajanja. To lahko povzroči večjo kompleksnost in potencial napake med izvajanjem v primerjavi s člani enum s konstantnimi vrednostmi.
Na primer:
var velikost;
(funkcijo (Velikost) {
Velikost[Velikost["majhen"] = 1] = "majhen";
Velikost[Velikost["srednje"] = izračunajVelikost(12)] = "srednje";
Velikost[Velikost["Velika"] = izračunajVelikost(5)] = "Velika";
})(Velikost || (Velikost = {}));
konzola.log(Velikost.Velik)
Zgornji blok kode je prevedena različica kode Velikost enum. Upoštevajte, da TypeScript ne vključuje vrnjenih vrednosti iz izračunaSize() v kodo JavaScript. Namesto tega vključuje izvirni klic funkcije, tako da JavaScript določi vrednosti med izvajanjem.
Dostop do vrednosti Enum
Do vrednosti članov enum lahko dostopate z zapisom predmeta pike.
Na primer:
enum Smer {
Gor = 0,
Dol = 1,
Levo = 2,
Desno = 3,
}
konzola.log (Smer. levo) // 2
Obratno preslikava številskih enumov
Obratno preslikavo v numeričnih enumih se nanaša na zmožnost pridobivanja ustreznega imena člana enum iz njegove vrednosti. To je lahko še posebej uporabno pri delu s številskimi vrednostmi, ki jih boste morda morali dekodirati.
Vrednosti enum v TypeScriptu so privzeto preslikane naprej, kar pomeni, da lahko dostopate samo do vrednosti, povezane z imenom. Vendar pa lahko ročno izvedete obratno preslikavo, da pridobite enum člana na podlagi njegove vrednosti.
Na primer:
enum Smer {
Gor = 1,
dol,
levo,
Prav
}funkcijogetDirectionName(directionValue: število): vrvica{
// Obratno preslikavo
konst directionName = Direction[directionValue];
vrnitev directionName;
}
konzola.log (getDirectionName(1)); // "Gor"
konzola.log (getDirectionName(3)); // "Levo"
to getDirectionName funkcija izvede obratno preslikavo z dostopom do imena člana enum z uporabo njegove vrednosti kot indeksa. Funkcija traja a directionValue kot argument in pridobi ustrezno ime člana enum z uporabo Smer [directionValue].
Obratno preslikavo je lahko priročno v scenarijih, kjer imate številsko vrednost in morate določiti ustrezno ime člana enum. Zagotavlja priročen način za delo z enumi v smeri naprej in nazaj.
Obstaja veliko aplikacij enumov
Enume lahko uporabite v različnih scenarijih, kot je obravnava stavkov preklopa, definiranje funkcijskih parametrov, preslikava podatkov in predstavljanje izbir ali nastavitev.
Ne glede na to, ali morate predstaviti končen nabor možnosti ali upravljati zapletene prehode stanj, so enumi v TypeScriptu dragoceno orodje za izboljšanje jasnosti in strukture vaše kode.