我正在开发一个用TypeScript 2编写的角度2项目,我目前面临着导入机制的问题。
我项目的每个子文件夹里面都有一个“index.ts”文件,即导出所述文件夹包含的类。
所以,在我的“app”目录中, 我有
然后,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'导入。)
提前谢谢你:)
答案 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。