Bis jetzt benutzte ich typescript interne Module und enthielt 10s von Script-Tags, um meine App zu starten. Ich bin gerade dabei, das Projekt auf externe Module umzustellen (mit browserify), aber ich stehe fest, wie ich Enums konvertieren soll.Typescript enums und externe Module (browserify)
Früher habe ich wie etwas haben:
mymodule.submodule {
enum MyEnum {
one,
two,
three
}
}
und ich würde es in anderen Modulen wie verwenden:
var val:mymodule.submodule.MyEnum = mymodule.submodule.MyEnum.one;
und diese richtig js zusammengestellt. Nachdem ich das Projekt auf externe Module umgestellt habe, habe ich alle meine Interfaces in * .d.ts Dateien verschoben und dachte daran, auch die Enums dort einzutragen, aber das führte natürlich zu einem Fehler, da es in js keine Zuordnung zwischen Enumeration und Nummer gab . Ich habe dann die Enums in * .ts Dateien verschoben, so dass sie kompiliert werden. Das Problem ist, dass, wenn ich schreibe sie als:
export enum MyEnum{
one,
two,
three
}
export enum OtherEnum {
four,
five,
six
}
, die als für die Forderung, die Aufzählungen in meinem Code funktioniert:
import Enums = require('./enums');
var val = Enums.MyEnum.one; //this works
var val1: mymodule.submodule.MyEnum = Enums.MyEnum.one; //ERROR: incompatible types
, ist aber nicht mit dem mymodule.submodule.MyEnum
Typ. Also wie kann ich eine Deklaration für den Enum-Typ haben, so kann ich Variablentypen in D.ts-Dateien deklarieren, aber auch den tatsächlichen generierten enum-Code abhängig (damit es korrekt geladen wird) und in .ts-Datei verwendet ?
Hinweis: Diese Enums werden in vielen Modulen verwendet, sodass es keine Lösung ist, sie in derselben Datei zu verwenden, in der sie verwendet werden.
UPDATE über Schnittstelle Erklärungen: es war wohl nicht klar, warum ich die ursprünglichen Enum Erklärungen in d.ts gehalten Dateien so ein Beispiel ich hinzufügen.
in interfaces.d.ts Ich habe derzeit:
declare module mymodule.submodule {
enum MyEnum{
one,
two,
three
}
interface ISomething{
aValue: MyEnum;
aFunction: (anArg: MyEnum) => void;
}
}
soweit ich weiß, dass ich nicht Import-Anweisungen in .d.ts verwenden, können Dateien so wie kann ich eine Enum-Deklaration in allen Fällen verwenden?
Und wie kann ich diese Aufzählungen in Interface-Deklarationen dann verwenden? Ich werde meine Frage aktualisieren, um dieses Problem anzuzeigen. – masimplo
@ mxa055 im Grunde, bewegen Sie Ihren gesamten Code aus Ihren Deklarationsdateien. Ich habe meine Antwort bearbeitet, um ein Beispiel zu zeigen. –