enums - Avvik i output fra enumeratorer i Typescript
Kan noen forklare outputen jeg får fra koden nedenfor?
enum dager { sol=1, man=0, tirs };
console.log(days[1]);/returnerer tirs/forventet utdata -- man
console.log(days[0]);/returnerer man/forventet utdata -- søn
Forklar også hvordan jeg kan få sun trykt i dette tilfellet? Dette scenariet forvirrer meg. Jeg ber dere om å gi gyldige forklaringer bare etter at dere har kjørt koden og observert resultatet.
Svar #1
Denne typescripten:
enum days { sun = 1, mon = 0, tues };
kompilerer til denne javascripten:
var days;
(function (days) {
days[days["sun"] = 1] = "sun";
days[days["mon"] = 0] = "mon";
days[days["tues"] = 1] = "tues";
})(days || (days = {}));
;
Denne første delen: days[days["sun"]=1]="sun";
evaluerer først days["sun"]=1 som:
- sørger for at du kan kalle
days.sunog få verdien 1 - returnerer verdien satt ved nøkkelen "sun" => 1. Dette betyr at opprinnelig
days[1]vil bli satt til "sun".
Den andre delen: days[days["mon"]=0]="mon";
- sørger for at du kan kalle
days.monog få verdien 0 - returnerer verdien som er satt ved nøkkelen "mon" => 0. Så
days[0]vil bli satt til "mon".
Denne tredje delen derimot: days[days["tues"]=1]="tues";
evaluerer days["tues"]=1 som
- sørger for at du kan kalle
days.tuesog få verdien 1 - returnerer også verdien satt ved nøkkelen "tues" => 1
Dette betyr at på dette punktet vil days[1] bli overskrevet med verdien "tues"
Svar #2
Måten du har konstruert enumen din på er uvanlig. I henhold til dokumentasjonen vil udefinerte enums automatisk lage en verdi for seg selv ved å +1 til forrige verdi.
Den nåværende enum-strukturen din vil ha to verdier satt til 1. Typescript/javascript ser ut til å velge det siste elementet med ønsket verdi.
Koden din:
enum days{
sun = 1,
mon = 0,
tues
}
VS (en lignende enum fra et prosjekt av meg som fungerer bra)
enum days{
Sun = 0,
Mon,
Tue,
Wed,
Thu,
Fri,
Sat
}
I henhold til dokumentasjonen (https://www.typescriptlang.org/docs/handbook/enums.html)
Den har ikke en initialisator, og det foregående enum-medlemmet var konstant. I dette tilfellet vil verdien til det nåværende enum-medlemmet være verdien til det foregående enum-medlemmet pluss én. Ett unntak fra denne regelen er det første elementet i en enum. Hvis det ikke har en initialisator, blir det tildelt verdien 0.
