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?

Greg Gum
quelle
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.

Greg Gum
quelle
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 .

luk355
quelle
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'
Sachin Kalia
quelle
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.

Darren Yuhar
quelle
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.

Valerii Sloboda
quelle