Le fichier 'app / hero.ts' n'est pas une erreur de module dans la console, où stocker les fichiers d'interface dans la structure de répertoires avec angular2?


144

Je fais le angular2tutoriel à cette adresse: https://angular.io/docs/ts/latest/tutorial/toh-pt3.html J'ai mis l' herointerface dans un seul fichier sous le appdossier, dans la console j'ai cette erreur :

app/app.component.ts(2,20): error TS2306: File 'app/hero.ts' is not a module.
[0] app/hero-detail.component.ts(2,20): error TS2306: File 'app/hero.ts' is not a module.

Si je mets mon fichier d'interface dans un dossier héros, l'erreur disparaît, cela n'est pas mentionné dans la documentation, quel est le problème avec mon import ?

Ma directive d'importation (au début des fichiers de composants) dans les deux app.components.tset hero-detail.component.ts:

import {Component} from 'angular2/core';

import {Hero} from './hero';

Dois-je remplacer ma directive d'importation par: import {Hero} from './'; ou simplement mettre le code dans un dossier héros ?

Réponses:


422

Essayez de redémarrer l'éditeur dans lequel vous écrivez le code (code VS ou Sublime). Compilez et exécutez à nouveau. J'ai fait la même chose et cela a fonctionné.

Cela se produit lorsque vous ajoutez une nouvelle classe en dehors de votre éditeur ou que vous continuez à exécuter votre service de cli 'ng angulaire'. En fait, votre éditeur ou la commande «ng serve» peut ne pas trouver les fichiers nouvellement créés.


4
Le redémarrage fonctionne ... mais tout le monde sait Quelle est la cause première?
Gaddigesh

J'ai également rencontré ce problème avec Angular 4 et VS Code. Je suivais l'une des vidéos sur Code School où ils séparaient les données dans un fichier mocks.ts, et à chaque fois qu'il était compilé, cela disait que ce n'était pas un module. Le redémarrage de VS Code a fonctionné. C'est très étrange que cela se soit produit, mais je n'ai eu aucune erreur lors du déplacement d'autres pièces dans des fichiers séparés.
Eric Garrison

2
C'est triste à dire, mais le redémarrage fonctionne. Et cela me rend la vie misérable: quand quelque chose ne fonctionne pas, je ne saurai pas si c'est parce que j'ai fait une erreur ou à cause d'une bizarrerie inexplicable de Node / Angular / Visual Code qui ne le laissera fonctionner que si je redémarre Visual Code ou le serveur. Ce n'est pas ainsi que les professionnels travaillent! :-(
Alexis Dufrenoy

2
Je l'ai corrigé en sauvegardant mon fichier. #sad
Malcolm Anderson

1
J'ai essayé de redémarrer le serveur et l'éditeur, cela n'a pas aidé. J'ai donc essayé de renommer les classes et les fichiers, finalement cela a fonctionné. Étrange mais vrai.
exécutable

37

J'ai eu la même erreur dans le même tutoriel car j'avais oublié le mot-clé d' exportation pour l'interface.


32

vous avez probablement oublié d'ajouter "Exporter" dans la définition de classe.

->

export class Hero {
     id: number;
     name: string;
   }

Essayez également avec

export {Hero} 

en bas de votre classe hero.ts, et enfin, vérifiez le nom du fichier en majuscules et le nom de la classe.


1
Je n'ai pas oublié d'exporter. J'ai pensé que j'avais peut-être une faute de frappe alors j'ai copié et collé votre code. Cela a résolu le problème. Mais ensuite, je suis revenu à mon code précédent et cela a également fonctionné. Quelque chose ne va pas.
Mariusz.W

est-ce mieux que de créer une normale const?
Dani le

29

L'erreur est que vous n'avez pas enregistré les fichiers après les avoir créés.

Essayez de sauvegarder tout le fichier en cliquant sur "Enregistrer tout" dans l'éditeur.

Vous pouvez voir le nombre de fichiers qui ne sont pas enregistrés en regardant ci-dessous le menu "Fichier" affiché en bleu.



6

Pour les personnes ayant la même erreur sur stackblitz

Vous trouverez un onglet Dépendance dans la barre latérale gauche de l'EDI. Cliquez simplement sur le bouton d'actualisation à côté et vous serez prêt à partir.


entrez la description de l'image ici


3

Comme je l'ai expérimenté chaque fois que j'ajoute un nouveau fichier à mon projet, je dois arrêter et redémarrer le serveur ng.


2

Le tutoriel vous permet de mettre tous les composants et le fichier d'interface dans le même répertoire d'où l'importation relative './hero' si vous souhaitez le déplacer ailleurs, vous devez changer cela.

Edit: le code peut toujours fonctionner mais le compilateur se plaindra car vous tentez une importation à partir d'un emplacement incorrect. Je changerais simplement l'importation en fonction de votre structure. Par exemple:

app/
  component1/
    component1.ts
  compnent2/
    component2.ts
  hero.ts

Je changerais simplement l'importation en import {Hero} from '../hero'.


Mon code fonctionne parfaitement, peu importe ce que j'écris, import {Hero} from './';ou import {Hero} from './hero';. Je me demande quelle est la meilleure façon de stocker les fichiers d'interface?
Sunitrams

Désolé @Zyzle, voté contre car je ne pense pas que cela résout le problème du PO
Steve Dunn

2

Cette erreur est causée par l'échec du ng serve pour récupérer automatiquement un fichier nouvellement ajouté. Pour résoudre ce problème, redémarrez simplement votre serveur.

Bien que la fermeture de la réouverture de l'éditeur de texte ou de l'EDI résout ce problème, beaucoup de gens ne veulent pas subir tout le stress de la réouverture du projet. Pour résoudre ce problème sans fermer l'éditeur de texte ...

Dans le terminal où le serveur fonctionne,

  • Appuyez sur ctrl+Cpour arrêter le serveur puis,
  • Redémarrez le serveur: ng serve

Cela devrait fonctionner.


1

J'ai fait face au même problème.

J'ai redémarré mon serveur et cela fonctionne très bien. Cela ressemble à un bug.


1

redémarrer le service

J'ai eu le même problème. Afin de rechercher l'erreur, j'ai sélectionné l'erreur et ai accidentellement fait un CTRL + C (ce qui signifie copier), qui a mis fin au service ng. Au redémarrage de ng serve, l'erreur a disparu :). Parfois, les fautes de frappe et les gros doigts aident ;-)


1

Problème de l'éditeur. Lorsque vous créez de nouveaux fichiers qui n'utilisent pas Angular CLI, assurez-vous d'aller dans Fichier> Tout enregistrer (code VS) pour informer l'éditeur de vos nouvelles modifications. Puis exécutez à nouveau "ng serve --open". Cela a résolu le mien. J'espère que ça aide


0

J'ai rencontré le même problème dans VSC. A redémarré l'éditeur et redémarré l'application. Cela a bien fonctionné.


Ce n'est pas une réponse qui donnerait un aperçu. Même si vous pensez que le redémarrage est la réponse à ce problème, vous devez expliquer pourquoi cela se produit.
M--

0

J'ai constaté que non seulement je devais redémarrer Visual Studio Code, mais également le processus du serveur de nœuds avant de pouvoir obtenir une bonne compilation.


0

J'étais confronté au même problème, j'ai essayé de redémarrer mon serveur, de rouvrir l'éditeur mais le redémarrage de l'ordinateur a fait la magie.

PS: J'étais confronté à un problème sur une machine Windows et un problème est survenu lorsque j'ai déplacé le module dans un nouveau dossier.


0

J'ai eu un problème similaire. J'ai écrit héros au lieu de héros

importer les éléments suivants:

import { Hero } from '../Hero';

0

Parfois, cette erreur se produit lorsque le fichier .ts n'est pas enregistré. Assurez-vous donc que tous les fichiers du projet sont enregistrés, sinon essayez de redémarrer l'éditeur.


0

Ouvrez l'invite de commande, accédez au dossier de l'application, par exemple D:\angular-tour-of-heroes\src\app

Créez ensuite un nouveau fichier à l'aide de la commande suivante:

ng generate class hero

Cela créera un hero.tsfichier. Ensuite, vous pouvez coller le code d'exportation et l'erreur a disparu.


0

Vous devez enregistrer tous les fichiers. Par exemple html, css, component.ts, module, fichiers de modèle. Ouvrez chaque fichier et appuyez sur ctrl-S. Cela a fonctionné pour moi


0

Dans mon cas, j'avais oublié d'enregistrer les modifications dans le fichier 'app / hero.ts', après l'enregistrement et le redémarrage de ng serve, le problème a été résolu.


0

Ma résolution,

Dans mon cas, j'ai créé un fichier modèle et je l'ai laissé vide,

donc quand je l'ai importé dans un autre modèle, cela me donne une erreur. écrivez donc la définition lorsque vous créez un fichier dactylographié de modèle.


0

changement

import{observable} from 'rxjs/observable'; 

à

import{observable} from 'rxjs';

assurez-vous d'avoir enregistré le fichier .TS avant la compilation.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.