Файл "app / hero.ts" - це не помилка модуля в консолі, де зберігати файли інтерфейсів у структурі каталогів з angular2?


144

Я роблю angular2підручник за цією адресою: https://angular.io/docs/ts/latest/tutorial/toh-pt3.html Я помістив heroінтерфейс в один файл під appпапкою, в консолі я маю цю помилку :

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.

Якщо я поміщую свій інтерфейсний файл у папку героя, помилка зникає, це не згадується в документації, що не так з моїм імпортом ?

Моя директива про імпорт (на початку створення компонентних файлів) у обох app.components.tsта hero-detail.component.ts:

import {Component} from 'angular2/core';

import {Hero} from './hero';

Повинен я замінити директиву про імпорт на: import {Hero} from './'; або просто помістити код у папку героїв ?

Відповіді:


422

Спробуйте перезапустити редактор, у який ви пишете код (VS-код або Sublime). Складіть і запустіть його ще раз. Я зробив те саме, і це спрацювало.

Це трапляється, коли ви додаєте новий клас поза своїм редактором або продовжуєте виконувати свій кутовий кліп 'ng serve'. Насправді ваш редактор або команда 'ng serve' можуть не в змозі знайти новостворені файли.


4
Перезапуск працює ... але хтось знає, що є першопричиною?
Gaddigesh

Я також зіткнувся з цією проблемою за допомогою Angular 4 та VS Code. Я переглядав одне із відео в Code School, де вони розділяли дані у файл mocks.ts, і кожного разу, коли вони збиралися, він говорив, що це не модуль. Перезапуск VS Code працював. Дуже дивно, що це сталося, але я не помилявся при переміщенні інших фрагментів в окремі файли.
Ерік Гаррісон

2
Сумно сказати, але перезапуск працює. І це робить моє життя жалюгідним: коли щось не працює, я не знаю, чи це тому, що я допустив помилку, або через якусь незрозумілу химерність Node / Angular / Visual Code, яка дозволить йому працювати, лише якщо я перезавантажую Visual Code або сервер. Це не так, як працюють професіонали! :-(
Алексіс Дуфрой

2
Я це виправив, зберігаючи свій файл. #sad
Малькольм Андерсон

1
Спробував перезапустити і сервер, і редактор, не допомогло. Тож спробували перейменувати класи та файли, врешті-решт це спрацювало. Дивно, але правда.
виконуваний

37

Я отримав таку ж помилку в тому самому підручнику, оскільки забув ключове слово для експорту інтерфейсу.


32

ймовірно, ви забули додати "Експорт" у визначенні класу.

->

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

Також спробуйте

export {Hero} 

внизу класу hero.ts і, нарешті, перевірте ім'я файлу з великої літери та ім'я класу.


1
Я не забув експортувати. Я подумав, що, можливо, я мав помилку помилку, тому я скопіював і вставив ваш код. Це вирішило проблему. Але потім я повернувся до свого попереднього коду, і він також працював. Щось не так.
Маріуш.W

чи кращий цей спосіб, ніж створення нормального const?
Дані

29

Помилка полягає в тому, що ви не зберегли файли після їх створення.

Спробуйте зберегти весь файл, натиснувши "Зберегти все" в Редакторі.

Ви можете побачити кількість файлів, які не зберігаються, переглянувши меню "Файл", показане синім кольором.



6

Для людей, які отримують ту саму помилку на stackblitz

Ви знайдете вкладку " Залежність" на лівій бічній панелі IDE. Просто натисніть кнопку оновлення поруч із нею, і ви будете добре їхати.


введіть тут опис зображення


3

Як я відчував кожного разу, коли я додав новий файл до свого проекту, мені довелося зупинити і перезапустити сервер ng.


2

У підручнику ви розміщуєте всі компоненти та файл інтерфейсу в одному каталозі, отже, відносний імпорт, './hero'якщо ви хочете перемістити його в інше місце, вам потрібно змінити це.

Редагувати: код все ще може працювати, але компілятор скаржиться на те, що ви намагаєтесь імпортувати з неправильного місця. Я б просто змінив імпорт на основі вашої структури. Наприклад:

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

Я б просто змінив імпорт на import {Hero} from '../hero'.


Хоча мій код ідеально працює, що б я не писав, import {Hero} from './';або import {Hero} from './hero';. Цікаво, який найкращий спосіб зберігати інтерфейсні файли?
Сунітрам

Вибачте @Zyzle, але я не думаю, що це стосується проблеми, яку мали ОП
Стів Данн

2

Ця помилка викликана відмовою сервера ng serveдля автоматичного підбору нещодавно доданого файлу. Щоб виправити це, просто перезавантажте сервер.

Хоча закриття повторного відкриття текстового редактора або IDE вирішує цю проблему, багато людей не хочуть переживати весь стрес від повторного відкриття проекту. Щоб виправити це, не закриваючи текстовий редактор ...

У терміналі, де працює сервер,

  • Натисніть, ctrl+Cщоб зупинити сервер потім,
  • Запустіть сервер ще раз: ng serve

Це має спрацювати.


1

Я зіткнувся з тим же питанням.

Я перезапустив сервер, і він працює чудово. Схоже на помилку.


1

перезапустити сервіс

У мене було те саме питання. З метою пошуку помилки я вибрав помилку і випадково зробив CTRL + C (мається на увазі копіювати), який припинив службу ng. При перезапуску сервісу помилка зникла :). Іноді допомагають друкарські помилки і жирові пальці ;-)


1

Випуск редактора. Коли ви створюєте нові файли, в яких не використовується Angular CLI, переконайтеся, що ви перейдете у меню Файл> Зберегти всі (код VS), щоб повідомити Редактору про ваші нові зміни. Потім знову запустіть "ng serve --open". Це вирішило моє. Сподіваюся, це допомагає


0

Я зіткнувся з тим же випуском у VSC. Перезапустив редактор і запустив програму знову. Це добре працювало.


Це не відповідь, яка б дала зрозуміти. Навіть якщо ви вважаєте, що перезапуск - це відповідь на цю проблему, ви повинні сказати, чому це відбувається.
M--

0

Я виявив, що мені довелося не тільки перезапустити Visual Studio Code, але й процес роботи сервера вузлів, перш ніж я міг отримати гарну компіляцію.


0

Я зіткнувся з тією ж проблемою, спробував перезапустити сервер, перезапустити редактор, але перезавантаження комп’ютера зробило магію.

PS: Я зіткнувся з проблемою на машині Windows, і проблема виникла, коли я перемістив модуль у нову папку.


0

У мене було подібне питання. Я написав героя замість Героя

імпортуйте наступне:

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

0

Іноді ця помилка виникає, коли .ts файл не зберігається. Тому переконайтеся, що всі файли проекту збережені, інакше спробуйте перезапустити редактор.


0

Відкрийте командний рядок, перейдіть до папки додатків, наприклад D:\angular-tour-of-heroes\src\app

Потім створіть новий файл за допомогою наступної команди:

ng generate class hero

Це створить hero.tsфайл. Потім ви можете вставити експортний код, і помилка зникла.


0

Вам слід зберегти всі файли. Наприклад, html, css, компонент.ts, модуль, файли моделі. Відкрийте кожен файл і натисніть ctrl-S. Це працювало для мене


0

У моєму випадку я забув зберегти зміни у файлі "app / hero.ts", після збереження та перезавантаження сервісу проблема була вирішена.


0

Моя резолюція,

У моєму випадку я створив модельний файл і зберігав його порожнім,

тому коли я імпортував його до іншої моделі, це дає мені помилку. тому напишіть визначення під час створення файлу типового сценарію моделі.


0

змінити

import{observable} from 'rxjs/observable'; 

до

import{observable} from 'rxjs';

переконайтеся, що ви зберегли .TS файл перед компіляцією.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.