Il file 'app / hero.ts' non è un errore del modulo nella console, dove archiviare i file delle interfacce nella struttura delle directory con angular2?


144

Sto facendo il angular2tutorial a questo indirizzo: https://angular.io/docs/ts/latest/tutorial/toh-pt3.html Ho messo l' herointerfaccia in un singolo file sotto la appcartella, nella console ho questo errore :

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.

Se inserisco il mio file di interfaccia in una cartella Hero, l'errore scompare, questo non è menzionato nella documentazione, cosa c'è di sbagliato nella mia importazione ?

La mia direttiva di importazione (alla base dei file dei componenti) in entrambi app.components.tse hero-detail.component.ts:

import {Component} from 'angular2/core';

import {Hero} from './hero';

Devo sostituire la mia direttiva di importazione con: import {Hero} from './'; o semplicemente inserire il codice in una cartella Hero ?

Risposte:


422

Prova a riavviare l'editor in cui stai scrivendo il codice (codice VS o Sublime). Compilare ed eseguirlo di nuovo. Ho fatto lo stesso e ha funzionato.

Questo succede quando aggiungi una nuova classe al di fuori del tuo editor o continui a eseguire il tuo servizio di selezione angolare. In realtà il tuo editor o il comando 'ng serve' potrebbero non essere in grado di trovare i file appena creati.


4
Il riavvio funziona ... ma qualcuno sa Qual è la causa principale?
Gaddigesh,

Ho anche riscontrato questo problema con Angular 4 e VS Code. Stavo seguendo uno dei video su Code School in cui separavano i dati in un file mocks.ts e ogni volta che veniva compilato diceva che non era un modulo. Il riavvio del codice VS ha funzionato. È molto strano che ciò sia accaduto, ma non ho riscontrato errori quando ho spostato altri pezzi in file separati.
Eric Garrison,

2
È triste a dirsi, ma il riavvio funziona. E mi rende la vita miserabile: quando qualcosa non funziona, non saprò se è perché ho fatto un errore o a causa di una stranezza inspiegabile di Node / Angular / Visual Code che la lascerà funzionare solo se riavvio Visual Code o il server. Non è così che lavorano i professionisti! :-(
Alexis Dufrenoy,

2
L'ho risolto salvando il mio file. #sad
Malcolm Anderson,

1
Ho provato a riavviare sia il server che l'editor, non ha aiutato. Così ho provato a rinominare classi e file, alla fine ha funzionato. Strano ma vero.
eseguibile

37

Ho avuto lo stesso errore nello stesso tutorial perché avevo dimenticato la parola chiave export per l'interfaccia.


32

probabilmente hai dimenticato di aggiungere "Esporta" nella definizione della classe.

->

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

Inoltre, prova con

export {Hero} 

in fondo alla tua classe hero.ts e, infine, controlla il nome del file delle lettere maiuscole e il nome della classe.


1
Non ho dimenticato di esportare. Ho pensato che forse avevo un refuso, quindi ho copiato e incollato il tuo codice. Ciò ha risolto il problema. Ma poi sono tornato al mio codice precedente e ha funzionato anche. Qualcosa è sbagliato.
Mariusz.

è meglio che creare un normale const?
Dani,

29

L'errore è perché non hai salvato i file dopo averli creati.

Prova a salvare tutto il file facendo clic su "Salva tutto" nell'Editor.

Puoi vedere il numero di file che non vengono salvati guardando sotto il menu "File" mostrato usando il colore blu.



6

Per le persone che ottengono lo stesso errore su Stackblitz

Troverai una scheda Dipendenza sulla barra laterale sinistra dell'IDE. Basta fare clic sul pulsante di aggiornamento accanto ad esso e sarai a posto.


inserisci qui la descrizione dell'immagine


3

Come ho sperimentato ogni volta che aggiungo un nuovo file al mio progetto, devo fermarmi e riavviare il server ng.


2

Il tutorial ti ha messo tutti i componenti e il file di interfaccia nella stessa directory, quindi l'importazione relativa './hero'se vuoi spostarlo altrove devi cambiarlo.

Modifica: il codice potrebbe ancora funzionare ma il compilatore si lamenterà perché stai tentando un'importazione da una posizione errata. Modificherei semplicemente l'importazione in base alla tua struttura. Per esempio:

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

Vorrei semplicemente cambiare l'importazione in import {Hero} from '../hero'.


Il mio codice funziona perfettamente comunque, qualunque cosa io scriva, import {Hero} from './';o import {Hero} from './hero';. Mi chiedo quale sia il modo migliore per archiviare i file di interfaccia?
Sunitrams,

Scusate @Zyzle, ridimensionato poiché non penso che questo risolva il problema del PO
Steve Dunn,

2

Questo errore è causato dal fallimento del ng serveservizio di prelevare automaticamente un nuovo file aggiunto. Per risolvere questo problema, è sufficiente riavviare il server.

Sebbene la chiusura della riapertura dell'editor di testo o dell'IDE risolva questo problema, molte persone non vogliono affrontare tutto lo stress della riapertura del progetto. Per risolvere questo problema senza chiudere l'editor di testo ...

Nel terminale in cui è in esecuzione il server,

  • Premere ctrl+Cper arrestare il server quindi,
  • Riavvia il server: ng serve

Dovrebbe funzionare.


1

Ho affrontato lo stesso problema.

Ho riavviato il mio server e funziona benissimo. Sembra un bug.


1

riavvia il servizio

Ho avuto lo stesso problema. Per cercare l'errore, ho selezionato l'errore e ho fatto accidentalmente un CTRL + C (che significa copiare), che ha terminato il servizio. Al riavvio di ng serve, l'errore è scomparso :). A volte i refusi e le dita grasse aiutano ;-)


1

Problema dell'editor. Quando crei nuovi file che non utilizzano l'interfaccia della riga di comando angolare, assicurati di andare su File> Salva tutto (codice VS) per informare l'editor delle tue nuove modifiche. Quindi eseguire nuovamente "ng serve --open". Ha risolto il mio. Spero che sia d'aiuto


0

Ho riscontrato lo stesso problema in VSC. Riavvia l'editor e riavvia l'applicazione. Ha funzionato bene.


Questa non è una risposta che darebbe intuizioni. Anche se pensi che il riavvio sia la risposta a questo problema, dovresti dire perché questo accade.
M--

0

Ho scoperto che non solo dovevo riavviare Visual Studio Code ma anche il processo del server dei nodi prima di poter ottenere una buona compilazione.


0

Stavo affrontando lo stesso problema, ho provato a riavviare il mio server, riaprendo l'editor ma il riavvio del computer ha fatto la magia.

PS: ho riscontrato un problema su un computer Windows e si è verificato un problema quando ho spostato il modulo in una nuova cartella.


0

Ho avuto un problema simile. Ho scritto eroe invece di Hero

importa quanto segue:

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

0

A volte questo errore si verifica quando il file .ts non viene salvato. Quindi assicurati di salvare tutti i file nel progetto, altrimenti prova a riavviare l'editor.


0

Apri il prompt dei comandi, vai alla cartella dell'app, ad es D:\angular-tour-of-heroes\src\app

Quindi creare un nuovo file utilizzando il seguente comando:

ng generate class hero

Questo creerà un hero.tsfile. Quindi è possibile incollare il codice di esportazione e l'errore scompare.


0

Dovresti salvare tutti i file. Ad esempio html, css, component.ts, module, file modello. Apri ogni file e premi ctrl-S. Questo ha funzionato per me


0

Nel mio caso avevo dimenticato di salvare le modifiche al file 'app / hero.ts', dopo aver salvato e riavviato il servizio è stato risolto.


0

La mia risoluzione,

Nel mio caso, ho creato un file modello e lo ho tenuto vuoto,

quindi quando l'ho importato su un altro modello, mi dà errore. quindi scrivi la definizione quando crei un file dattiloscritto del modello.


0

modificare

import{observable} from 'rxjs/observable'; 

per

import{observable} from 'rxjs';

assicurati di avere salvato il file .TS prima di compilare.


0

aggiungilo prima di esportare la classe

@Injectable({
  providedIn: 'root'
})  
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.