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

Cannot resolve import from index.ts from script located in same directory

我正在处理一个用 TypeScript 2 编写的 angular 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' 导入)。

提前谢谢你:)

这可能是一条 resharper 错误消息。你有安装resharper吗?您可以禁用它并重试吗?

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

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

我完全有 same issue.

您似乎有循环依赖

当你这样写的时候:

import { AppComponent } from '.';

解析器转到 index.ts 并看到:

export * from './app.component';

然后它转到 ./app.component 并看到这个:

import { AppComponent } from '.';

所以它转到 index.ts 并看到这个:

export * from './app.component';

以此类推...

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

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

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

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

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

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