文件'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.

如果将接口文件放在hero文件夹中,错误消失了,文档中没有提到,导入有什么问题?

我的import指令(在组件文件的beguining)在这两个app.components.tshero-detail.component.ts

import {Component} from 'angular2/core';

import {Hero} from './hero';

我是否必须将导入指令替换为:import {Hero} from './'; 或将代码放在hero文件夹中

Answers:


421

尝试重新启动要在其中编写代码(VS代码或Sublime)的编辑器。编译并再次运行。我做过同样的事情,而且奏效了。

当您从编辑器外部添加新类或继续运行角度倾斜“发球”时,就会发生这种情况。实际上,您的编辑器或“ ng serve”命令可能无法找到新创建的文件。


4
重新启动工作...但是任何人都知道根本原因是什么?
Gaddigesh

我也遇到了Angular 4和VS Code的问题。我在Code School上观看了其中一个视频,他们将数据分成了一个单独的mocks.ts文件,每次编译时,它都说它不是一个模块。重新启动VS Code可以正常工作。发生这种情况非常奇怪,但是将其他片段移动到单独的文件中时我没有遇到任何错误。
埃里克·加里森

2
这是痛心地说,但在重新启动工作。而且这使我的生活痛苦不堪:当某些事情不起作用时,我不知道这是因为我犯了一个错误还是由于Node / Angular / Visual Code的莫名其妙的怪异,只有当我重新启动Visual Code时,它才会起作用或服务器。那不是专业人士的工作方式!:-(
Alexis Dufrenoy

2
我通过保存文件来修复它。#sad
Malcolm Anderson

1
尝试重新启动服务器和编辑器,没有帮助。因此尝试重命名类和文件,最终成功了。
可执行


32

可能您忘记在类定义中添加“导出”。

->

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

另外,尝试

export {Hero} 

在hero.ts类的底部,最后检查大写字母文件名和类名。


1
我没有忘记出口。我以为我可能有错字,所以我复制并粘贴了您的代码。这解决了问题。但是后来我恢复了以前的代码,它也正常工作。出了点问题。
Mariusz.W

这比创建法线更好const吗?
丹妮(Dani)

29

该错误是因为创建文件后您尚未保存文件。

尝试通过单击编辑器上的“全部保存”来保存所有文件。

通过查看蓝色显示的“文件”菜单下方,可以看到未保存的文件数。




3

正如我每次将新文件添加到项目中所经历的那样,我必须停止并重新启动ng服务器。


2

本教程将所有组件和接口文件放在同一个目录中,因此,'./hero'如果要将相对移动导入到其他位置,则需要进行相对导入。

编辑:该代码可能仍然可以工作,但是编译器会抱怨,因为您尝试从错误的位置导入。我只是根据您的结构更改导入。例如:

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

我只是将导入更改为import {Hero} from '../hero'


我的代码是完美的工作,虽然,不管我写,import {Hero} from './';import {Hero} from './hero';。我想知道存储接口文件的最佳方法是什么?
Sunitrams

抱歉@Zyzle,我对此表示不满,因为我认为这不能解决OP所遇到的问题
Steve Dunn

2

此错误是由于服务器ng serve无法自动提取新添加的文件引起的。要解决此问题,只需重新启动服务器即可。

尽管关闭重新打开的文本编辑器或IDE可以解决此问题,但是许多人并不想承受重新打开项目的所有压力。要解决此问题而不关闭文本编辑器...

在服务器运行的终端中,

  • 按下ctrl+C以停止服务器,
  • 再次启动服务器: ng serve

那应该工作。


1

我遇到了同样的问题。

我重新启动了服务器,并且工作正常。好像是个错误。


1

重新开始服务

我遇到过同样的问题。为了搜索错误,我选择了错误并意外地执行了CTRL + C(意味着复制),这终止了ng服务。重新启动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

在我的情况下,我忘记保存对文件“ app / hero.ts”的更改,在保存并重新启动ng服务后,问题已解决。


0

我的决心

就我而言,我创建了一个模型文件并将其保留为空白,

因此,当我将其导入其他模型时,它给了我错误。因此,当您创建模型打字稿文件时,请写下定义。


0

更改

import{observable} from 'rxjs/observable'; 

import{observable} from 'rxjs';

在编译之前,请确保已保存.TS文件。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.