So importieren Sie eine Aufzählung


77

Ich habe eine Aufzählung erstellt, habe jedoch Probleme beim Importieren und Verwenden der Aufzählung in VS15.

Dies ist die Aufzählung, die in enums.ts enthalten ist:

enum EntityStatus {
     New = 0,
     Active = 1,
     Archived = 2,
     Trashed = 3,
     Deleted = 4
}

Visual Studio sieht diese Aufzählung ohne Import und gibt daher keinen Fehler bei der Kompilierung aus. Zur Laufzeit wird jedoch ein Fehler ausgegeben

 Cannot read property 'Archived' of undefined.

Jetzt versuche ich es so zu importieren, wie ich andere Klassen importiere:

 import {EntityStatus} from "../../core/enums";

Visual Studio gibt jetzt einen Fehler bei der Kompilierung aus:

 "...enums is not a module ..."

Wie importiere ich die Aufzählung?


das gleiche Problem für mich.
Jayani Sumudini

Antworten:


103

Mir fehlte das Export-Schlüsselwort:

 export enum EntityStatus {
      New = 0,
      Active = 1,
      Archived = 2,
      Trashed = 3,
      Deleted = 4
 }

Dann hat es wie erwartet funktioniert.


9
Stellen Sie sicher, dass dies innerhalb eines *.ts. *.d.tsDateien funktionieren nicht. Eine Falle, in die ich geraten bin.
Martin Braun

27

Sie erhalten den gleichen Cannot read property 'Foo' of undefined.Laufzeitfehler, wenn Sie Ihre Aufzählung in einer der TypeScript-Deklarationsdateien ( *.d.ts) definieren, da diese Dateien nicht in JavaScript übertragen werden.

Weitere Details mit einer Beispiel-App finden Sie hier .


Ich denke nicht, dass ein * .d.ts ein guter Ort wäre, um eine Aufzählung zu definieren.
Greg Gum

3
Nun, ich auch nicht. Besonders nach der Zeitverschwendung, indem ich herausgefunden habe, warum meine Aufzählung nicht definiert ist :)
luk355

Sie können dann einfach ein Objekt verwenden, um den Code in eine separate .js-Datei zu exportieren, z. B.: Export const EReviewStatus = {PENDING: 'PENDING', SENT: 'SENT'}
TeemuK

21

Bitte versuchen Sie dies. Für mich geht das

enums.ts

export enum  Category {Cricket,Tennis,Golf,Badminton}

und im erforderlichen .ts-Dateiimport wie folgt:

import {Category} from './enums'

18

Bin gerade auf etwas Ähnliches gestoßen. In meinem Fall musste ich sicherstellen, dass der exportierte Aufzählungsname vom Namen der Datei abweicht.

dh.

Der Export von enum AccessMode in die Datei access-mode.ts würde fehlschlagen. Export enum AccessMode in Datei access-mode.ts würde funktionieren.


4
überraschenderweise hat es auch bei mir funktioniert. Kennen Sie den Grund dafür, warum dies geschieht?
Neeraj Jain

Diese Antwort hat mir geholfen, ein Problem mit Rollup zu "beheben", bei dem meine Aufzählung nicht exportiert wurde.
Sipke Schoorstra

1

Wie @Sachin Kalia sagte, hatte ich ein Problem mit Importen.

Ich habe das geändert:

import {MessageAction, MessageDTO} from '../../../generated/dto';

dazu:

import {MessageDTO} from '../../../generated/dto';
import {MessageAction} from '../../../generated/dto'

MessageAction ist meine Aufzählung.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.