Plik „app / hero.ts” nie jest błędem modułu w konsoli, gdzie przechowywać pliki interfejsów w strukturze katalogów z angular2?

144

angular2Samouczek robię pod tym adresem: https://angular.io/docs/ts/latest/tutorial/toh-pt3.htmlhero Interfejs umieściłem w jednym pliku pod appfolderem, w konsoli mam ten błąd :

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.

Jeśli umieszczę plik interfejsu w folderze hero, błąd zniknie, nie ma tego w dokumentacji, co jest nie tak z moim importem ?

Moja dyrektywa importowa (na początku plików składowych) w obu app.components.tsi hero-detail.component.ts:

import {Component} from 'angular2/core';

import {Hero} from './hero';

Czy muszę zamienić dyrektywę importu na: import {Hero} from './'; czy po prostu umieścić kod w folderze hero ?

Sunitrams
źródło

Odpowiedzi:

422

Spróbuj ponownie uruchomić edytor, w którym piszesz kod (kod VS lub Sublime). Skompiluj i uruchom ponownie. Zrobiłem to samo i zadziałało.

Dzieje się tak, gdy dodajesz nową klasę poza edytorem lub kontynuujesz obsługę kątowego kliknięcia. W rzeczywistości Twój edytor lub polecenie „ng serv” mogą nie być w stanie znaleźć nowo utworzonych plików.

ajitkumar
źródło
4
Ponowne uruchomienie działa ... ale każdy wie, jaka jest główna przyczyna?
Gaddigesh
Napotkałem również ten problem z Angular 4 i VS Code. Śledziłem jeden z filmów w Code School, w którym dzielili dane na plik mocks.ts i za każdym razem, gdy był kompilowany, informował, że nie jest to moduł. Ponowne uruchomienie VS Code zadziałało. To bardzo dziwne, że tak się stało, ale nie dostałem żadnych błędów podczas przenoszenia innych elementów do oddzielnych plików.
Eric Garrison
2
To smutne, ale ponowne uruchomienie działa. I to sprawia, że ​​moje życie jest nieszczęśliwe: kiedy coś nie działa, nie będę wiedział, czy to dlatego, że popełniłem błąd, czy z powodu jakiegoś niewytłumaczalnego dziwactwa Node / Angular / Visual Code, który pozwoli mu działać tylko wtedy, gdy ponownie uruchomię Visual Code lub serwer. Nie tak działają profesjonaliści! :-(
Alexis Dufrenoy
2
Naprawiłem to, zapisując mój plik. #sad
Malcolm Anderson
1
Próbowałem zrestartować serwer i edytor, nie pomogło. Próbowałem więc zmieniać nazwy klas i plików, ale w końcu zadziałało. Dziwne, ale prawdziwe.
wykonywalny
37

Otrzymałem ten sam błąd w tym samym samouczku, ponieważ zapomniałem słowa kluczowego eksportu dla interfejsu.

Rasmus Rummel
źródło
32

prawdopodobnie zapomniałeś dodać „Eksport” w definicji klasy.

->

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

Spróbuj też z

export {Hero} 

na dole swojej klasy hero.ts, a na koniec sprawdź nazwę pliku i nazwę klasy z wielkiej litery.

Sebastian Gomez
źródło
1
Nie zapomniałem o eksporcie. Pomyślałem, że może mam literówkę, więc skopiowałem i wkleiłem twój kod. To rozwiązało problem. Ale potem wróciłem do mojego poprzedniego kodu i też zadziałało. Coś jest nie tak.
Mariusz.W
czy to jest lepsze niż tworzenie normalnego const?
Dani
29

Błąd jest spowodowany tym, że nie zapisałeś plików po ich utworzeniu.

Spróbuj zapisać cały plik, klikając „Zapisz wszystko” w edytorze.

Możesz zobaczyć liczbę plików, które nie zostały zapisane, patrząc pod menu „Plik” pokazane kolorem niebieskim.

brijesh
źródło
13

Ponowne uruchomienie ng serveprocesu zadziałało dla mnie

Andrea Gherardi
źródło
6

Dla ludzi otrzymujących ten sam błąd na stackblitz

Znajdziesz zakładkę Zależności na lewym pasku bocznym IDE. Wystarczy kliknąć przycisk odświeżania obok niego i gotowe.


wprowadź opis obrazu tutaj

Abdullah Khan
źródło
3

Jak zauważyłem za każdym razem, gdy dodałem nowy plik do mojego projektu, musiałem zatrzymać i ponownie uruchomić serwer ng.

Zabijaka
źródło
2

W samouczku umieścisz wszystkie komponenty i plik interfejsu w tym samym katalogu, stąd import względny, './hero'jeśli chcesz przenieść go w inne miejsce, musisz to zmienić.

Edycja: kod może nadal działać, ale kompilator będzie narzekał, ponieważ próbujesz zaimportować z nieprawidłowej lokalizacji. Po prostu zmieniłbym import w oparciu o twoją strukturę. Na przykład:

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

Po prostu zmieniłbym import na import {Hero} from '../hero'.

Zyzle
źródło
Mój kod działa jednak doskonale, cokolwiek piszę import {Hero} from './';lub import {Hero} from './hero';. Zastanawiam się, jaki jest najlepszy sposób przechowywania plików interfejsu?
Sunitrams,
Przepraszam @Zyzle, głosy w dół, ponieważ nie sądzę, aby to rozwiązało problem, który miał OP
Steve Dunn,
2

Ten błąd jest spowodowany niepowodzeniem ng serveserwowania, aby automatycznie pobrać nowo dodany plik. Aby to naprawić, po prostu zrestartuj serwer.

Chociaż zamknięcie ponownego otwarcia edytora tekstu lub IDE rozwiązuje ten problem, wiele osób nie chce przechodzić przez cały stres związany z ponownym otwarciem projektu. Aby naprawić ten problem bez zamykania edytora tekstu ...

W terminalu, na którym działa serwer,

  • Naciśnij, ctrl+Caby zatrzymać serwer, a następnie
  • Uruchom serwer ponownie: ng serve

To powinno działać.

Pila
źródło
1

Napotkałem ten sam problem.

Zrestartowałem serwer i działa dobrze. Wygląda na błąd.

Dalvik
źródło
1

zrestartuj serw

Miałem ten sam problem. Aby wyszukać błąd, wybrałem błąd i przypadkowo wykonałem CTRL + C (czyli kopiowanie), co zakończyło serwis ng. Po ponownym uruchomieniu ng serwisu błąd zniknął :). Czasami pomagają literówki i grube palce ;-)

kishore
źródło
1

Problem z redakcją. Podczas tworzenia nowych plików, które nie używają interfejsu wiersza polecenia Angular, upewnij się, że przechodzisz do Plik> Zapisz wszystko (VS Code), aby umożliwić redaktorowi powiadomienie o nowych zmianach. Następnie ponownie uruchom „ng serv --open”. To rozwiązało moje. Mam nadzieję, że to pomoże

Hung Vu
źródło
0

Napotkałem ten sam problem w VSC. Zrestartowałem edytor i ponownie uruchomiłem aplikację. Działało dobrze.

B_sadagopan
źródło
To nie jest odpowiedź, która dawałaby wgląd. Nawet jeśli uważasz, że ponowne uruchomienie jest odpowiedzią na ten problem, powinieneś powiedzieć, dlaczego tak się dzieje.
M--
0

Zauważyłem, że nie tylko musiałem ponownie uruchomić Visual Studio Code, ale także proces serwera węzłowego, zanim mogłem uzyskać dobrą kompilację.

Phred Menyhert
źródło
0

Miałem ten sam problem, próbowałem ponownie uruchomić serwer, ponownie otworzyć edytor, ale ponowne uruchomienie komputera zrobiło magię.

PS: Napotkałem problem na komputerze z systemem Windows i wystąpił problem, gdy przeniosłem moduł do nowego folderu.

Api
źródło
0

Miałem podobny problem. Napisałem bohatera zamiast bohatera

zaimportuj następujące elementy:

import { Hero } from '../Hero';
Gero
źródło
0

Czasami ten błąd występuje, gdy plik .ts nie jest zapisywany. Upewnij się więc, że wszystkie pliki w projekcie zostały zapisane, w przeciwnym razie spróbuj ponownie uruchomić edytor.

babidi
źródło
0

Otwórz wiersz poleceń, przejdź do folderu aplikacji, np D:\angular-tour-of-heroes\src\app

Następnie utwórz nowy plik za pomocą następującego polecenia:

ng generate class hero

Spowoduje to utworzenie hero.tspliku. Następnie możesz wkleić kod eksportu, a błąd zniknął.

ankit mishra
źródło
0

Powinieneś zapisać wszystkie pliki. Na przykład html, css, component.ts, module, pliki modeli. Otwórz każdy plik i naciśnij ctrl-S. To zadziałało dla mnie

Abdul Mutaal
źródło
0

W moim przypadku zapomniałem zapisać zmiany w pliku „app / hero.ts”, po zapisaniu i ponownym uruchomieniu serwisu problem został rozwiązany.

tmndungu
źródło
0

Moja rozdzielczość,

W moim przypadku utworzyłem plik modelu i pozostawiłem go pustym,

więc kiedy zaimportowałem go do innego modelu, daje mi błąd. więc zapisz definicję podczas tworzenia pliku z typem modelu.

Pradip Thakre
źródło
0

zmiana

import{observable} from 'rxjs/observable'; 

do

import{observable} from 'rxjs';

upewnij się, że masz zapisany plik .TS przed kompilacją.

powiedział muzammil
źródło
0

dodaj to przed wyeksportowaniem klasy

@Injectable({
  providedIn: 'root'
})  
Pan Markosian
źródło