TypeScript-enums en hun alternatieven

TypeScript-enums

TypeScript-enum: numeric, string, const en de alternatieven | We.Inc

Genereer numeric, string en const enums van uw eigen membernamen, bekijk de exacte JavaScript die elk oplevert, en vergelijk ze met as const-objecten en literal unions.

Een enum geeft een set benoemde constanten één type. Numeric enums tellen op vanaf 0 en koppelen getallen ook terug aan namen; string enums hebben per member een literal nodig en hebben geen reverse mapping; const enums worden inline gezet en verdwijnen. Anders dan het meeste TypeScript leveren gewone enums echte JavaScript op, en daarom kiezen veel teams liever voor as const-objecten.

Vijf manieren om een vaste set waarden te modelleren

Typ membernamen in de generator en wissel tussen stijlen. Hij schrijft de TypeScript-declaratie en de JavaScript die de compiler zou opleveren, zodat u de kosten van elke keuze ziet voordat ze in uw bundle belanden.

Veelgestelde vragen

Wat is een reverse mapping?

Voor numeric enums slaat tsc beide richtingen op het object op, dus Direction.Up is 0 en Direction[0] is de string Up. String members krijgen geen omgekeerde vermelding, omdat de waarde zou kunnen botsen met de naam van een ander member.

Waarom kan ik geen gewone string doorgeven aan een functie die een string enum verwacht?

String enum-members zijn aparte types. De compiler meldt dat de literal niet toewijsbaar is aan de enum, dus aanroepers moeten Status.Draft schrijven. Als u wilt dat aanroepers de literal kunnen doorgeven, gebruik dan een union van string literals.

Hoe loop ik over de waarden van een enum?

Voor een string enum geeft Object.values(MyEnum) de waarden terug. Voor een numeric enum bevat het object ook de omgekeerde keys, dus filter: Object.values(MyEnum).filter((v) => typeof v === 'number').

Zijn enums verouderd?

Nee. Ze blijven onderdeel van TypeScript. Met de nieuwere optie erasableSyntaxOnly, toegevoegd in TypeScript 5.8, kunnen projecten die op type stripping vertrouwen ze verbieden, omdat een enum niet kan worden verwijderd door alleen annotaties te schrappen.

Draait Node.js bestanden met enums direct?

Niet met de standaard type stripping. De documentatie van Node noemt enum-declaraties bij de functies die codegeneratie nodig hebben en in die modus niet worden ondersteund, dus compileer ze met tsc of een andere transformer, of stap over op een as const-object.

Numeric enums: compact maar kwetsbaar

String enums: leesbaar en strikt

Het as const-patroon

De drie soorten enums en wat ze opleveren

Numeric enum met een startwaarde

Mid en High tellen verder vanaf Low. Het opgeleverde object koppelt in beide richtingen.

String enum

Elk member wordt één keer toegewezen, zonder omgekeerde vermelding.

const enum

De declaratie verdwijnt en elk gebruik wordt vervangen door de waarde.

Verwijderbare alternatieven

as const-object plus een afgeleide union

Werkt met type strippers, itereert met Object.values en accepteert de losse string.

Gewone union als er geen runtime-lijst nodig is

Volledig verwijderd; de compiler weigert nog steeds elke andere string.

Enums verbieden in een project met type stripping

Met deze optie is een enum-declaratie een compileerfout.

Numeric enum

String enum

const enum

as const-object

Union type

Enum-generator

Typenaam

Members (gescheiden door komma's)

Eerste getal

Enumstijl

TypeScript

Opgeleverde JavaScript

TypeScript kopiëren

JavaScript kopiëren

Gebruik namen die beginnen met een letter, $ of _, en alleen letters, cijfers, $ of _ bevatten, zonder dat een naam twee keer voorkomt.

{n} members

Gratis beginnen · Geen creditcard nodig

Gerelateerd: Gidsen

Product

Voor wie

Functies

Bronnen

Bedrijf

Sitemap