8

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

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

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

  • app.component.ts
  • app.module.ts
  • 应用程序.routes.ts

然后,一个 index.ts 文件包含:

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

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

例如,在我的 app.module.ts 中,我想导入 app 组件。如果我做 :

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' 导入)。

先感谢您 :)

4

3 回答 3

13

我有完全相同的问题

你似乎有循环依赖

当你写这个:

import { AppComponent } from '.';

解析器去index.ts看看这个:

export * from './app.component';

所以然后它会./app.component看到这个:

import { AppComponent } from '.';

所以它去index.ts看看这个:

export * from './app.component';

等等等等...

奇怪的是你没有收到任何警告,而且,根据加载程序,它实际上可能第二次正确解析(所以第一次你得到未定义但在随后的调用中它正确解析) - 我花了 4 个小时因为一个不太明显的循环依赖。我强烈认为 typescript 应该对这些事情提出警告,因为它是一个适当的蠕虫罐头。

于 2016-10-12T00:22:59.257 回答
3

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

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

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

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

这不适用于您从node_modules.

于 2017-08-29T19:49:45.697 回答
0

这可能是更清晰的错误消息。你安装了resharper吗?您可以禁用它并重试吗?

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

我有一个 9.x 版本的 resharper,它只让我使用 Typescript 1.6。我必须更新到 10.x 才能到 2.0。

于 2016-10-10T20:42:16.310 回答