Набројани тип ТипеСцрипт-а је згодан начин паковања повезаних вредности, са јасним значењем.
Енум, или набројани тип, је структура података која вам омогућава да дефинишете скуп именованих вредности.
Енуми обезбеђују начин да се фиксни скуп вредности представи као константе. Они могу помоћи да ваш код буде изражајнији и самодокументујући дајући смислена имена одређеним вредностима. Овде ћете научити како можете да користите енуме у ТипеСцрипт-у.
Креирање енума
Енуми генерално представљају фиксни број опција за дату вредност. На пример, енум који представља примарне боје може имати фиксне вредности за црвену, жуту и плаву.
Енумови представљају податке као скуп парова кључ/вредност познатих као чланови енума. Кључ увек мора бити низ. Међутим, вредност — подразумевано аутоматски повећавајући број — може бити нумеричка, стринг или израчуната.
Можете креирати енум у језик ТипеСцрипт помоћу енум кључна реч. Пратите га именом енума и пар витичастих заграда ({}) који садржи чланове енума. Уобичајена ЈаваСцрипт конвенција о именовању наводи да имена енума треба да почињу великим словом.
енум Правац {
горе,
доле,
лево,
Јел тако
}
Овај пример садржи енум тзв Правац. Енум има члана који представља сваки правац: горе, доле, лево и десно.
Пошто овај код не наводи вредност за сваки од кључева, ТипеСцрипт ће аутоматски доделити вредности. Први члан, Уп, имаће вредност 0. Сваки преостали чланови ће имати вредност за 1 већу од вредности претходног члана. Ово можете експлицитно да изјавите ако вам је тешко да запамтите:
енум Правац {
Горе = 0,
Доле = 1,
Лево = 2,
Десно = 3,
}
Или можете експлицитно декларисати различите вредности, остављајући недекларисане вредности да наставе да се повећавају као и раније:
енум Статус {
Ацтиве = 9,
неактиван, // 10
}
У овом примеру, неактиван члан има вредност 10. Ово понашање се примењује на набрајања која имају само нумеричке вредности, а не на оне са стринговима или хетерогеним члановима.
Различити типови енума
Енумови у ТипеСцрипт-у имају имплицитни тип који заснивају на типу вредности које држе њихови чланови. Најчешћи тип је нумерички енум, чије понашање покрива претходни одељак, али постоје две варијације.
Стринг Енумс
Енум стрингова је енум у коме су сви његови чланови низови. За разлику од нумеричких набрајања, где се вредности аутоматски додељују, сваки члан морате да иницијализујете низом:
енум ПримариЦолорс {
Црвена = "ЦРВЕНО",
Жута = "ЖУТО",
Плава = "ПЛАВИ"
}
Иако низови низова немају својства аутоматског повећања, могу имати више смисла ако их серијализирате. Њихове вредности и даље треба да буду описне, без имена чланова, док скуп нумеричких вредности можда неће бити самоописујући.
Хетерогеноус Енумс
Хетерогене набрајања су набрајања која садрже и нумеричке и стрингове чланове. На пример:
енум Резултат {
Успех = "УСПЕХ",
Неуспех = 0
}
Хетерогени наброји су корисни када имате чланове енума који захтевају различите типове вредности на основу специфичног контекста или значења сваког члана. Међутим ТипеСцрипт документација обесхрабрује употребу хетерогених енума јер уносе сложеност која може учинити ваш код склонијим грешкама.
Израчунати и константни чланови енума
Сваки члан енума има вредност, која може бити константна или израчуната.
Константни чланови енума
Члан енума је константан ако испуњава било који од услова у наставку.
- То је први члан енума и нема иницијализатор.
- Нема иницијализатор, а претходни члан набрајања је био нумеричка константа.
- Иницијализује се константним енум изразом.
Према ТипеСцрипт документацији, константни енум израз је подскуп ТипеСцрипт израза који се може у потпуности проценити у време компајлирања. На пример, стринг или нумерички литерал.
На пример, сви чланови енума у блоку кода испод су константни:
// СЛУЧАЈ 1
енум Правац {
горе,
доле,
лево,
Јел тако
}// СЛУЧАЈ 2
енум радни дан {
понедељак = 1,
уторак,
Среда,
четвртак,
петак
}
// СЛУЧАЈ 3
енум Годишње доба {
Пролеће = "ПРОЛЕЋЕ",
Лето = "ЛЕТО",
Јесен = "ЈЕСЕН",
Зима = "ЗИМА"
}
Када транспилирате константне чланове енума у обичан ЈаваСцрипт, генерисани код користи њихове литералне вредности. Ово може бити корисно за перформансе и олакшати отклањање грешака.
На пример, ево транспилиране верзије набрајања сезоне:
вар Годишње доба;
(функција (Годишње доба) {
Годишње доба["Пролеће"] = "ПРОЛЕЋЕ";
Годишње доба["лето"] = "ЛЕТО";
Годишње доба["Јесен"] = "ЈЕСЕН";
Годишње доба["зима"] = "ЗИМА";
})(Сезона || (Сезона = {}));
Израчунати чланови енума
Можете користити израчунате чланове набрајања да доделите вредности члановима набрајања на основу израза или других динамичких израчунавања. На пример:
енум Величина {
Мала = 1,
Средњи = израчунај величину(12),
Велики = израчунај величину(5)
}функцијаизрачунајте величину(вредност: број): број{
повратак вредност * 5;
}
конзола.лог (величина. велика)
Тхе Величина енум има три члана: Мала, Средње, и Велики. Он експлицитно додељује вредност 1 малом члану. Тхе Средње и Велики чланови користе функцију израчунајте величину да се израчунају њихове вредности током извршавања.
Када радите са израчунатим енум члановима, важно је напоменути да вредности нису познате до времена извршавања. Ово може увести више сложености и потенцијала грешке у току извођења у поређењу са члановима енума са константним вредностима.
На пример:
вар Величина;
(функција (Величина) {
Величина[Величина["мали"] = 1] = "мали";
Величина[Величина["средњи"] = израчунај величину(12)] = "средњи";
Величина[Величина["велики"] = израчунај величину(5)] = "велики";
})(Величина || (Величина = {}));
конзола.Пријава(Величина.Ларге)
Блок кода изнад је транспилирана верзија Величина енум. Обратите пажњу на то како ТипеСцрипт не укључује повратне вредности из ЦалцулатеСизе() у ЈаваСцрипт коду. Уместо тога, укључује оригинални позив функције тако да ЈаваСцрипт одређује вредности током времена извршавања.
Приступање Енум вредностима
Можете приступити вредностима чланова енума користећи нотацију тачке објекта.
На пример:
енум Правац {
Горе = 0,
Доле = 1,
Лево = 2,
Десно = 3,
}
конзола.лог (Смер. лево) // 2
Обрнуто пресликавање нумеричких енума
Обрнуто пресликавање у нумеричким енумима односи се на могућност преузимања одговарајућег имена члана енума из његове вредности. Ово може бити посебно корисно када радите са нумеричким вредностима, које ћете можда морати да дешифрујете.
Подразумевано, енум вредности у ТипеСцрипт-у су унапред мапиране, што значи да можете приступити само вредности која је повезана са именом. Међутим, можете ручно да извршите обрнуто мапирање да бисте преузели члан енума на основу његове вредности.
На пример:
енум Правац {
Горе = 1,
доле,
лево,
Јел тако
}функцијагетДирецтионНаме(дирецтионВалуе: број): низ{
// Обрнуто пресликавање
конст име смјера = Смјер[вриједност смјера];
повратак дирецтионНаме;
}
конзола.лог (гетДирецтионНаме(1)); // "Горе"
конзола.лог (гетДирецтионНаме(3)); // "Лево"
Ово гетДирецтионНаме функција врши обрнуто мапирање приступајући имену члана енума користећи његову вредност као индекс. Функција узима а дирецтионВалуе као аргумент и преузима одговарајуће име члана енума користећи Правац[дирецтионВалуе].
Обрнуто мапирање може бити згодно у сценаријима где имате нумеричку вредност и морате да одредите одговарајуће име члана енума. Пружа згодан начин за рад са енумима у напред и обрнутом смеру.
Постоји много примена енума
Можете користити енуме у различитим сценаријима, као што је руковање наредбама свитцх, дефинисање параметара функције, мапирање података и представљање избора или подешавања.
Без обзира да ли треба да представите коначан скуп опција или да управљате сложеним прелазима стања, набрајања у ТипеСцрипт-у су вредан алат за побољшање јасноће и структуре вашег кода.