El archivo 'app / hero.ts' no es un error de módulo en la consola, ¿dónde almacenar archivos de interfaces en la estructura de directorios con angular2?

144

Estoy haciendo el angular2tutorial en esta dirección: https://angular.io/docs/ts/latest/tutorial/toh-pt3.html He puesto la herointerfaz en un solo archivo debajo de la appcarpeta, en la consola tengo este error :

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 coloco mi archivo de interfaz en una carpeta de héroe, el error desaparece, esto no se menciona en la documentación, ¿qué hay de malo en mi importación ?

Mi directiva de importación (al comienzo de los archivos componentes) en ambos app.components.tsy hero-detail.component.ts:

import {Component} from 'angular2/core';

import {Hero} from './hero';

¿Debo reemplazar mi directiva de importación por: import {Hero} from './'; o simplemente poner el código en una carpeta de héroe ?

Sunitrams
fuente

Respuestas:

422

Intente reiniciar el editor en el que está escribiendo el código (código VS o Sublime). Compilar y ejecutar de nuevo. He hecho lo mismo y funcionó.

Esto sucede cuando agrega una nueva clase fuera de su editor o sigue ejecutando su cli 'ng serve' angular. De hecho, es posible que su editor o el comando 'ng serve' no puedan encontrar los archivos recién creados.

ajitkumar
fuente
44
Reiniciar funciona ... pero cualquiera sabe ¿Cuál es la causa raíz?
Gaddigesh
También me encontré con este problema con Angular 4 y VS Code. Estaba siguiendo uno de los videos en Code School donde separan los datos en un archivo mocks.ts, y cada vez que se compilaba, decía que no era un módulo. Reiniciar VS Code funcionó. Es muy extraño que esto haya sucedido, pero no recibí ningún error al mover otras piezas a archivos separados.
Eric Garrison
2
Es triste decirlo, pero reiniciar funciona. Y hace que mi vida sea miserable: cuando algo no funciona, no sabré si es porque cometí un error o por alguna peculiaridad inexplicable de Node / Angular / Visual Code que solo lo dejará funcionar si reinicio Visual Code o el servidor. ¡Así no es como trabajan los profesionales! :-(
Alexis Dufrenoy
2
Lo arreglé guardando mi archivo. #sad
Malcolm Anderson
1
Intenté reiniciar el servidor y el editor, no ayudó. Así que traté de cambiar el nombre de las clases y los archivos, finalmente funcionó. Extraño pero cierto.
ejecutable
37

Obtuve el mismo error en el mismo tutorial porque había olvidado la palabra clave de exportación para la interfaz.

Rasmus Rummel
fuente
32

probablemente olvidó agregar "Exportar" en la definición de clase.

->

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

Además, intente con

export {Hero} 

en la parte inferior de su clase hero.ts, y finalmente, verifique el nombre del archivo de mayúscula y el nombre de la clase.

Sebastian Gomez
fuente
1
No me olvidé de exportar. Pensé que tal vez tenía un error tipográfico, así que copié y pegué su código. Esto solucionó el problema. Pero luego volví a mi código anterior y funcionó también. Algo está mal.
Mariusz.W
¿Es así mejor que crear un normal const?
Dani
29

El error se debe a que no ha guardado los archivos después de crearlos.

Intente guardar todo el archivo haciendo clic en "Guardar todo" en el Editor.

Puede ver la cantidad de archivos que no se guardan mirando debajo del menú "Archivo" que se muestra en color azul.

brijesh
fuente
13

Reiniciar mi ng serveproceso funcionó para mí

Andrea Gherardi
fuente
6

Para las personas que obtienen el mismo error en stackblitz

Encontrará una pestaña Dependencia en la barra lateral izquierda del IDE. Simplemente haga clic en el botón Actualizar al lado y estará listo para comenzar.


ingrese la descripción de la imagen aquí

Abdullah Khan
fuente
3

Como experimenté cada vez que agrego un nuevo archivo a mi proyecto, tuve que detener y reiniciar el servidor ng.

Héctor
fuente
2

El tutorial hace que coloque todos los componentes y el archivo de interfaz en el mismo directorio, por lo tanto, la importación relativa './hero'si desea moverlo a otro lugar, debe cambiar esto.

Editar: el código aún puede funcionar, pero el compilador se quejará porque está intentando importar desde una ubicación incorrecta. Simplemente cambiaría la importación en función de su estructura. Por ejemplo:

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

Simplemente cambiaría la importación a import {Hero} from '../hero'.

Zyzle
fuente
Sin embargo, mi código funciona perfectamente, sea lo que sea que escriba, import {Hero} from './';o import {Hero} from './hero';. Me pregunto cuál es la mejor manera de almacenar archivos de interfaz.
Sunitrams
Lo siento @Zyzle, rechazado porque no creo que esto aborde el problema que tuvo el OP
Steve Dunn
2

Este error es causado por el error del servidor ng servepara recoger automáticamente un archivo recién agregado. Para solucionar esto, simplemente reinicie su servidor.

Aunque cerrar la reapertura del editor de texto o IDE resuelve este problema, muchas personas no quieren pasar por todo el estrés de reabrir el proyecto. Para arreglar esto sin cerrar el editor de texto ...

En la terminal donde se ejecuta el servidor,

  • Presione ctrl+Cpara detener el servidor y luego,
  • Inicie el servidor nuevamente: ng serve

Eso debería funcionar.

Pila
fuente
1

Me enfrenté al mismo problema.

Reinicié mi servidor y funciona bien. Parece un error.

Dalvik
fuente
1

reiniciar ng servir

Tuve el mismo problema. Para buscar el error, seleccioné el error y accidentalmente hice un CTRL + C (que significa copiar), que finalizó ng serve. Al reiniciar ng serve, el error desapareció :). A veces, los errores tipográficos y los dedos gordos ayudan ;-)

kishore
fuente
1

Problema del editor. Cuando cree archivos nuevos que no utilicen CLI angular, asegúrese de ir a Archivo> Guardar todo (Código VS) para informar al Editor de sus nuevos cambios. Luego ejecute "ng serve --open" nuevamente. Se resolvió el mío. Espero eso ayude

Hung Vu
fuente
0

Me encontré con el mismo problema en VSC. Reinició el editor y comenzó la aplicación nuevamente. Funcionó bien.

B_sadagopan
fuente
Esta no es una respuesta que daría alguna idea. Incluso si cree que reiniciar es la respuesta a este problema, debe decir por qué sucede esto.
M--
0

Descubrí que no solo tenía que reiniciar Visual Studio Code sino también el proceso del servidor de nodo antes de poder obtener una buena compilación.

Phred Menyhert
fuente
0

Estaba enfrentando el mismo problema, intenté reiniciar mi servidor, reabrí el editor, pero el reinicio de la computadora hizo la magia.

PD: Estaba enfrentando un problema en una máquina con Windows y ocurrió cuando moví el módulo a una nueva carpeta.

Api
fuente
0

Tuve un problema similar Escribí héroe en lugar de héroe

importar lo siguiente:

import { Hero } from '../Hero';
Gero
fuente
0

A veces, este error ocurre cuando el archivo .ts no se guarda. Por lo tanto, asegúrese de guardar todos los archivos del proyecto; de lo contrario, intente reiniciar el editor.

babidi
fuente
0

Abra el símbolo del sistema, vaya a la carpeta de la aplicación, p. Ej. D:\angular-tour-of-heroes\src\app

Luego cree un nuevo archivo con el siguiente comando:

ng generate class hero

Esto creará un hero.tsarchivo. Luego puede pegar el código de exportación y el error desaparecerá.

ankit mishra
fuente
0

Debes guardar todos los archivos. Por ejemplo html, css, component.ts, módulo, archivos de modelo. Abra cada archivo y presione ctrl-S. Esto funciono para mi

Abdul Mutaal
fuente
0

En mi caso, olvidé guardar los cambios en el archivo 'app / hero.ts', después de guardar y reiniciar ng serve se resolvió el problema.

tmndungu
fuente
0

Mi resolución

En mi caso, he creado un archivo modelo y lo he mantenido en blanco,

así que cuando lo importé a otro modelo, me da un error. escriba la definición cuando cree un archivo de mecanografiado modelo.

Pradip Thakre
fuente
0

cambio

import{observable} from 'rxjs/observable'; 

a

import{observable} from 'rxjs';

asegúrese de guardar el archivo .TS antes de compilar.

dijo muzammil
fuente
0

agregue esto antes de exportar la clase

@Injectable({
  providedIn: 'root'
})  
Pan Markosian
fuente