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.