J'utilise typescript 1.6 avec la syntaxe des modules es6.
Mes fichiers sont:
test.ts:
module App {
export class SomeClass {
getName(): string {
return 'name';
}
}
}
main.ts:
import App from './test';
var a = new App.SomeClass();
Lorsque j'essaie de compiler le main.ts
fichier, j'obtiens cette erreur:
Erreur TS2306: le fichier 'test.ts' n'est pas un module.
Comment puis-je y parvenir?
javascript
typescript
ecmascript-6
Bazinga
la source
la source
Réponses:
Extended - pour fournir plus de détails en fonction de certains commentaires
L'erreur
Provient du fait décrit ici http://exploringjs.com/es6/ch_modules.html
Sur la base de ce qui précède, nous avons besoin du
export
, dans le cadre du fichier test.js. Ajustez-en le contenu comme ceci:Et maintenant, nous pouvons l'importer de trois manières:
Et nous pouvons consommer des trucs importés comme ceci:
et appelez la méthode pour la voir en action:
La partie d'origine essaie de réduire la complexité de l'utilisation de l'espace de noms
Pièce d'origine:
Je suggérerais vraiment fortement de vérifier ces questions et réponses:
Comment utiliser les espaces de noms avec les modules externes TypeScript?
Permettez-moi de citer la première phrase:
Dans ce cas, nous n'avons tout simplement pas besoin de l'
module
intérieur detest.ts
. Cela pourrait être le contenu de celui-ci ajustétest.ts
:En savoir plus ici
Exporter =
nous pouvons le consommer plus tard comme ceci:
En savoir plus ici:
Chargement de module en option et autres scénarios de chargement avancés
la source
Les réponses ci-dessus sont correctes. Mais juste au cas où ... Vous avez la même erreur dans VS Code. J'ai dû ré-enregistrer / recompiler le fichier qui provoquait une erreur.
la source
Comment puis-je y parvenir?
Votre exemple déclare un module interne TypeScript <1.5 , qui est maintenant appelé un espace de noms . L'ancienne
module App {}
syntaxe équivaut désormais ànamespace App {}
. En conséquence, les travaux suivants:Cela étant dit...
Essayez d'éviter d'exporter des espaces de noms et d'exporter à la place des modules (qui étaient auparavant appelés modules externes ). Si nécessaire, vous pouvez utiliser un espace de noms lors de l'importation avec le modèle d'importation d'espace de noms comme ceci:
la source
En plus de la réponse de A. Tim, il y a des moments où même cela ne fonctionne pas, vous devez donc:
la source
export class... {
, ce que angular n'aimait pas, ce qui m'a posé ce problème. Après avoir corrigé le formatage, compilé sans problème.En plus de la réponse de Tim, ce problème est survenu pour moi lorsque je divisais un refactoring d'un fichier, le divisant en leurs propres fichiers.
VSCode, pour une raison quelconque, a indenté des parties de mon code [class], ce qui a causé ce problème. C'était difficile à remarquer au début, mais après avoir réalisé que le code était en retrait, j'ai formaté le code et le problème a disparu.
par exemple, tout ce qui se trouvait après la première ligne de la définition de classe était automatiquement mis en retrait pendant le collage.
la source