Файл app / hero.ts не является ошибкой модуля в консоли, где хранить файлы интерфейсов в структуре каталогов с angular2?

148

Я делаю 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 './'; или просто поместить код в папку героя ?

Сунитрамс
источник

Ответы:

430

Попробуйте перезапустить редактор, в котором вы пишете код (VS code или Sublime). Скомпилируйте и запустите снова. Я сделал то же самое, и это сработало.

Это происходит, когда вы добавляете новый класс вне своего редактора или продолжаете работать с angular cli 'ng serve'. На самом деле ваш редактор или команда ng serve могут не находить вновь созданные файлы.

Аджиткумар
источник
4
Перезагрузка работает ... но кто-нибудь знает В чем основная причина?
Гаддигеш
Я также столкнулся с этой проблемой с Angular 4 и VS Code. Я следил за одним из видео на Code School, где они разделяют данные в файл mocks.ts, и каждый раз, когда он компилируется, он говорит, что это не модуль. Перезапуск VS Code сработал. Очень странно, что это произошло, но я не получал ошибок при перемещении других частей в отдельные файлы.
Эрик Гаррисон,
2
Как ни печально, но перезапуск работает. И это делает мою жизнь несчастной: когда что-то не работает, я не знаю, из-за того, что я сделал ошибку, или из-за какой-то необъяснимой причуды Node / Angular / Visual Code, которая позволит ему работать, только если я перезапущу Visual Code или сервер. Так не работают профессионалы! :-(
Alexis Dufrenoy
2
Я исправил это, сохранив свой файл. #sad
Малкольм Андерсон
1
Пытался перезапустить и сервер, и редактор, не помогло. Так что попробовал переименовать классы и файлы, в конце концов это сработало. Странно, но факт.
исполняемый
38

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

Расмус Раммель
источник
37

возможно, вы забыли добавить «Экспорт» в определение класса.

->

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

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

export {Hero} 

внизу вашего класса hero.ts и, наконец, проверьте имя файла с заглавной буквой и имя класса.

Себастьян Гомес
источник
1
Не забыл экспортировать. Я подумал, что, возможно, у меня есть опечатка, поэтому я скопировал и вставил ваш код. Это устранило проблему. Но затем я вернулся к своему предыдущему коду, и он тоже сработал. Что-то не так.
Mariusz.W
это лучше, чем создание нормального const?
Дэни
31

Ошибка связана с тем, что вы не сохранили файлы после их создания.

Попробуйте сохранить все файлы, нажав «Сохранить все» в редакторе.

Вы можете увидеть количество файлов, которые не были сохранены, посмотрев под меню «Файл», показанное синим цветом.

Brijesh
источник
14

Перезапуск моего ng serveпроцесса сработал для меня

Андреа Герарди
источник
7

Для людей, получающих ту же ошибку на stackblitz

На левой боковой панели среды IDE вы найдете вкладку « Зависимость ». Просто нажмите кнопку обновления рядом с ним, и все будет в порядке.


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

Абдулла Хан
источник
3

Как я испытал всякий раз, когда я добавлял новый файл в свой проект, мне приходилось останавливать и перезапускать сервер ng.

Гектор
источник
2

В руководстве вы помещаете все компоненты и файл интерфейса в один и тот же каталог, следовательно, относительный импорт, './hero'если вы хотите переместить его в другое место, вам нужно это изменить.

Изменить: код все еще может работать, но компилятор будет жаловаться, потому что вы пытаетесь импортировать из неправильного места. Я бы просто изменил импорт в зависимости от вашей структуры. Например:

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

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

Zyzle
источник
Мой код отлично работает, что бы я ни писал, import {Hero} from './';или import {Hero} from './hero';. Интересно, как лучше всего хранить файлы интерфейса?
Sunitrams
Извините, @Zyzle, проголосовали против, поскольку я не думаю, что это решает проблему, которая была у OP
Стив Данн
2

Эта ошибка вызвана тем, что сбойный сервер ng serveавтоматически принимает новый добавленный файл. Чтобы исправить это, просто перезапустите сервер.

Хотя закрытие и повторное открытие текстового редактора или IDE решает эту проблему, многие люди не хотят испытывать стресс, связанный с повторным открытием проекта. Чтобы исправить это, не закрывая текстовый редактор ...

В терминале, на котором запущен сервер,

  • Нажмите, ctrl+Cчтобы остановить сервер, затем,
  • Снова запустите сервер: ng serve

Это должно сработать.

Пила
источник
2

Не забудьте также экспортировать свой класс или интерфейс.

export interface Sort {
    value: string;
    viewValue: string;
}
ONE_FE
источник
1

Я столкнулся с той же проблемой.

Я перезапустил свой сервер, и он работает нормально. Похоже на ошибку.

Дальвик
источник
1

перезапустить службу

Я была такая же проблема. Чтобы найти ошибку, я выбрал ошибку и случайно нажал CTRL + C (что означает «копировать»), что прервало ng serve. При перезапуске ng serve ошибка исчезла :). Иногда помогают опечатки и толстые пальцы ;-)

Кишор
источник
1

Выпуск редактора. Когда вы создаете новые файлы, которые не используют Angular CLI, убедитесь, что вы перешли в File> Save All (VS Code), чтобы редактор узнал о ваших новых изменениях. Затем снова запустите "ng serve --open". Это решило мою проблему. Надеюсь, это поможет

Hung Vu
источник
0

Я столкнулся с той же проблемой в VSC. Перезапустил редактор и снова запустил приложение. Работало нормально.

B_sadagopan
источник
Это не ответ, который дал бы какое-то представление. Даже если вы думаете, что перезапуск - это ответ на эту проблему, вы должны сказать, почему это происходит.
M
0

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

Фред Менихерт
источник
0

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

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

Api
источник
0

У меня была аналогичная проблема. Я написал героя вместо героя

импортировать следующее:

import { Hero } from '../Hero';
Геро
источник
0

Иногда эта ошибка возникает, когда файл .ts не сохраняется. Поэтому убедитесь, что все файлы в проекте сохранены, в противном случае попробуйте перезапустить редактор.

Бабиди
источник
0

Откройте командную строку, перейдите в папку приложения, например D:\angular-tour-of-heroes\src\app

Затем создайте новый файл, используя следующую команду:

ng generate class hero

Это создаст hero.tsфайл. Затем вы можете вставить код экспорта, и ошибка исчезнет.

Анкит мишра
источник
0

Вам следует сохранить все файлы. Например, html, css, component.ts, файлы модуля, модели. Откройте каждый файл и нажмите ctrl-S. Это сработало для меня

Абдул Мутаал
источник
0

В моем случае я забыл сохранить изменения в файле app / hero.ts, после сохранения и перезапуска ng serve проблема была решена.

tmndungu
источник
0

Мое решение,

В моем случае я создал файл модели и оставил его пустым,

поэтому, когда я импортировал его в другую модель, это дает мне ошибку. поэтому напишите определение при создании файла машинописного текста модели.

Прадип Такре
источник
0

изменение

import{observable} from 'rxjs/observable'; 

к

import{observable} from 'rxjs';

перед компиляцией убедитесь, что вы сохранили .TS файл.

сказал Музаммил
источник
0

добавьте это перед экспортом класса

@Injectable({
  providedIn: 'root'
})  
Пан Маркосян
источник