Do tej pory używałem wbudowanych modułów maszynowych i zawierałem 10 s znaczników skryptu, aby załadować aplikację. Obecnie jestem w trakcie przekształcania projektu, aby korzystać z modułów zewnętrznych (przy użyciu przeglądarki internetowej), ale utknąłem na tym, jak powinienem konwertować wyliczenia.Wypisy maszynowe i moduły zewnętrzne (przeglądarka)
kiedyś coś takiego:
mymodule.submodule {
enum MyEnum {
one,
two,
three
}
}
i chciałbym użyć go w inne moduły jak:
var val:mymodule.submodule.MyEnum = mymodule.submodule.MyEnum.one;
i to skompilowany do js poprawnie. Po konwersji projektu na moduły zewnętrzne przeniosłem wszystkie moje interfejsy do plików * .d.ts i pomyślałem o umieszczeniu tam również enum, ale oczywiście spowodowało to błąd, ponieważ nie było odwzorowania między wyliczeniem a liczbą w js . Następnie przeniosłem enumy na pliki * .ts, aby zostały skompilowane. Problem polega na tym, że jeśli piszę je jako:
export enum MyEnum{
one,
two,
three
}
export enum OtherEnum {
four,
five,
six
}
która działa na nałożenie na stałe teksty w moim kodu jako:
import Enums = require('./enums');
var val = Enums.MyEnum.one; //this works
var val1: mymodule.submodule.MyEnum = Enums.MyEnum.one; //ERROR: incompatible types
lecz jest niezgodne z typem mymodule.submodule.MyEnum
. Więc w jaki sposób mogę mieć zarówno deklarację typu wyliczeniowego, aby można było zadeklarować typy zmiennych w plikach d.ts, ale także mieć rzeczywisty wygenerowany kod enum zależny od (tak, aby był poprawnie załadowany) i używany w pliku .ts ?
Uwaga: te wyliczenia są używane w wielu modułach, więc uwzględnienie ich w tym samym pliku, którego są używane, nie jest rozwiązaniem.
UPDATE o deklaracji interfejsu: to prawdopodobnie nie było jasne, dlaczego ja zachowałem oryginalne deklaracje enum w d.ts plików więc dodaję przykład.
w interfaces.d.ts Obecnie mam:
declare module mymodule.submodule {
enum MyEnum{
one,
two,
three
}
interface ISomething{
aValue: MyEnum;
aFunction: (anArg: MyEnum) => void;
}
}
o ile wiem, nie mogę przy użyciu instrukcji import plików w .d.ts tak jak mogę użyć jednej deklaracji enum we wszystkich przypadkach?
i jak mogę wykorzystać te teksty stałe w deklaracji interfejsu wtedy? Zaktualizuję moje pytanie, aby wyświetlić ten problem. – masimplo
@ mxa055 zasadniczo, przenieś cały kod z plików deklaracji. Edytowałem swoją odpowiedź, aby pokazać przykład. –