Fino ad ora stavo usando i moduli interni dattiloscritti e incluso 10 di tag di script per avviare la mia app. Sono attualmente in fase di conversione del progetto per utilizzare i moduli esterni (utilizzando browserify) ma sono bloccato su come dovrei convertire le enumerazioni.Espressioni di dattiloscritto e moduli esterni (browserify)
ho usato per avere qualcosa di simile:
mymodule.submodule {
enum MyEnum {
one,
two,
three
}
}
e vorrei utilizzarlo in altri moduli come:
var val:mymodule.submodule.MyEnum = mymodule.submodule.MyEnum.one;
e questo compilato a JS in modo corretto. Dopo aver convertito il progetto in moduli esterni, ho spostato tutte le mie interfacce in file * .d.ts e ho pensato di inserire l'enumerazione anche lì, ma naturalmente questo ha prodotto un errore poiché non vi era alcuna mappatura tra enum e numero in js . Ho quindi spostato l'enumerazione nei file * .ts in modo che vengano compilati. Il problema è che se li scrivo come:
export enum MyEnum{
one,
two,
three
}
export enum OtherEnum {
four,
five,
six
}
che lavora per richiedere le enumerazioni nel mio codice come:
import Enums = require('./enums');
var val = Enums.MyEnum.one; //this works
var val1: mymodule.submodule.MyEnum = Enums.MyEnum.one; //ERROR: incompatible types
MA è compatibile con il tipo mymodule.submodule.MyEnum
. Quindi, come posso avere una dichiarazione per il tipo di enum in modo da poter dichiarare tipi di variabili all'interno di file d.ts, ma anche il codice enum generato effettivamente dipende (in modo che venga caricato correttamente) e usato nel file .ts ?
Nota: queste enumerazioni sono utilizzate in molti moduli, quindi includerli nello stesso file utilizzato non è una soluzione.
UPDATE su dichiarazioni di interfaccia: probabilmente non era chiaro il motivo per cui ho mantenuto le dichiarazioni enum originali in d.tS file in modo sto aggiungendo un esempio.
in interfaces.d.ts Al momento ho:
declare module mymodule.submodule {
enum MyEnum{
one,
two,
three
}
interface ISomething{
aValue: MyEnum;
aFunction: (anArg: MyEnum) => void;
}
}
per quanto ne so che non posso utilizzare istruzioni import in .d.ts file in modo come posso usare una dichiarazione enum in tutti i casi?
E come posso usare queste enumerazioni in dichiarazioni di interfaccia, allora? Aggiornerò la mia domanda per visualizzare questo problema. – masimplo
@ mxa055 in pratica, sposta tutto il tuo codice dai tuoi file di dichiarazione. Ho modificato la mia risposta per mostrare un esempio. –