Не удается разрешить импорт из index.ts из сценария, расположенного в том же каталоге

Я работаю над угловым 2 проектом, написанным на TypeScript 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 ответа

Решение

У меня была точно такая же проблема.

Кажется, у вас круговая зависимость.

Когда вы пишете это:

import { AppComponent } from '.';

решатель переходит к index.ts и видит это:

export * from './app.component';

так что тогда идет к ./app.component и видит это:

import { AppComponent } from '.';

так что идет к index.ts и видит это:

export * from './app.component';

И так далее...

Странно, что вы не получаете предупреждений, и, в зависимости от загрузчика, он может действительно корректно разрешиться второй раз (так что в первый раз вы получаете неопределенное значение, но при последующих вызовах он разрешается правильно) - я потратил 4 часа из-за гораздо менее очевидная круговая зависимость. Я настоятельно утверждаю, что машинопись должна выдвигать предупреждение об этих вещах, потому что это правильная банка червей.

Чтобы избежать круговой зависимости, просто не надо:

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

Вместо этого используйте прямой путь к файлу:

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

Это не относится к модулям, которые вы импортируете из node_modules,

Это может быть резкое сообщение об ошибке. У вас установлен резарпер? Вы можете отключить его и попробовать еще раз?

Если это ошибка резче, установите версию Typescript в опциях Resharper.

У меня была версия Resharper для 9.x, и я получил только Typescript 1.6. Мне пришлось обновить до 10.x, чтобы добраться до 2.0.

Другие вопросы по тегам