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.sun og 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.mon og 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.tues og 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.

Relaterte artikler