2017-11-23 3 views
0

Ich versuche ein eckiges Projekt mit der neuen tsickle/closure-Kette zu kompilieren. Allerdings scheint es zu folgenden Fehler auf allen Aufzählungen zu haben:exportierte enums kompilieren nicht mit tsickle/closure

src/path/to/YourEnumType.ts: 1: ERROR - Ausfuhren auf der obersten Ebene eines Moduls eine Aussage sein muss

diese

ist mein Code:

export enum YourEnumType { 
    None = 0, 
    OneThing = 1, 
    OtherThing = 2 
} 

Wie könnte ich mit diesem Problem umgehen?

Antwort

0

Der Typoskript Compiler generiert aus exportiert Aufzählungen dies:

var YourEnumType; 
(function (YourEnumType) { 
    YourEnumType[YourEnumType["None"] = 0] = "None"; 
    YourEnumType[YourEnumType["OneThing"] = 1] = "OneThing"; 
    YourEnumType[YourEnumType["OtherThing"] = 2] = "OtherThing"; 
})(YourEnumType = exports.YourEnumType || (exports.YourEnumType = {})); 

Wie wir sehen können, ja, das erzeugt Javascript um die exports aus dem Inneren einer Funktion verwendet.

In den Typskript-Compiler zu graben, mit dem generierten Ausgabeformat zu spielen, und so weiter, habe ich keine Möglichkeit gefunden, um dies zu umgehen. Trotzdem wäre dies Typoskript Code viel besser, wenn es kompiliert werden würde, wie wir in this Antwort sehen:

var YourEnumType = Object.freeze({"None":1, "OneThing":2, "OtherThing":3, ...}); 

Leider Typoskript dies nicht tun.

Ähnliche Graben in der Google Closure-Compiler show, dass es keine Möglichkeit gibt, um dies zu umgehen, ohne die Google Closure-Quellcode zu ändern.

Also, in Anbetracht dieser und anderer großer Probleme mit Enums in der gesamten Welt des Typoskripts, denke ich, dass der einzige Ausweg darin besteht, die Verwendung von Typoskript-Enums zu vermeiden.