无法从位于同一目录中的脚本解析index.ts中的导入

时间:2016-10-10 15:50:00

标签: angular typescript import dependency-resolver

我正在开发一个用TypeScript 2编写的角度2项目,我目前面临着导入机制的问题。

我项目的每个子文件夹里面都有一个“index.ts”文件,即导出所述文件夹包含的类。

所以,在我的“app”目录中, 我有

  • app.component.ts
  • app.module.ts
  • app.routes.ts

然后,index.ts文件包含:

export * from './app.component';
export * from './app.module';
export * from './app.routes';

我的问题是我无法从位于同一目录中的文件导入导出的类。

例如,在我的app.module.ts中,我想导入应用程序组件。 如果我这样做:

import { AppComponent } from './app.component';

一切正常!编译时和运行时没有错误。生活很酷,生活很美好。

但我无法做到以下几点:

import { AppComponent } from '.'; // or './', or even './index'

IDE(Visual Studio)实际上正确解析了导入(它编译时没有错误)。我甚至从Intellisence获得自动完成......

但是我在运行时遇到了这个错误:

 Error: Unexpected value 'undefined' imported by the module 'AppModule'

我只是不知道为什么。

注意:我从子文件夹中的index.ts导入时没有任何错误(例如,我可以从也有索引的'./core'导入。)

提前谢谢你:)

3 个答案:

答案 0 :(得分:11)

我完全拥有same issue

您似乎有循环依赖

当你这样写:

6.1 MB

解析器转到import { AppComponent } from '.'; 并看到:

index.ts

然后转到export * from './app.component'; 并看到:

./app.component

所以转到import { AppComponent } from '.'; 并看到:

index.ts

依此类推......

这有什么奇怪之处在于你没有得到任何警告,并且,根据加载程序,它实际上可能第二次正确解析(所以第一次你得到未定义但在后续调用中它正确解析) - 我和因为一个不太明显的循环依赖,花了4个小时。我强烈反对打字稿应该对这些事情发出警告,因为它是一种适当的蠕虫病毒。

答案 1 :(得分:2)

为避免循环依赖,请不要:

import { SomeClass } from './path/to/index';

相反,直接使用文件路径:

import { SomeClass } from './path/to/some-class';

这不适用于从node_modules导入的模块。

答案 2 :(得分:0)

这可能是一个resharper错误消息。你有安装resharper吗?你可以禁用它并再试一次吗?

如果是resharper错误,请在Resharper选项中设置Typescript的版本。

我有一个9.x版本的resharper,它只让我到了Typescript 1.6。我不得不更新到10.x以获得2.0。