2015-08-12 6 views
0

При импорте модуля без '.' или '..'
Например: import File from 'FileClass';
Как компилятор ts разрешает 'FileClass' точно?Что именно происходит, когда `import Foo from" Bar "` в TypeScript

Док говорит

  • Имена модулей могут быть относительными или верхнего уровня. Имя модуля относительное, если первый член равен «.». или "..".
  • Имена верхнего уровня разрешены с помощью корня пространства имен концептуального модуля.

https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#11.3.1

Так 'FileClass' должен быть так называемый top-level модуль.
Но, документ не объяснил, что такое модуль top-level.

Первый вопрос для меня - это то, что означает термин top-level? А что такое conceptual module name space root?

Продолжить читать документ, и я нашел этот

Если декларация импорта указывает имя модуля верхнего уровня и программа не содержит AmbientModuleDeclaration (раздел 12.2) с строковый литерал, который указывает, что точное название , имя разрешается в зависимости от хоста (например, рассматривая имя относительно корня пространства имен имени модуля). Если соответствующий модуль не найден, возникает ошибка.

Это трудно понять для меня. Есть ли для этого пример реального мира?

PS: Я использую машинопись 1.5

+0

Вы можете просмотреть скомпилированные файлы '.js' и посмотреть, что именно происходит. – Artem

ответ

1

Это зависит от того, какую систему вы используете модуль с компилятором. Например, если вы используете --module commonjs, синтаксис модуля преобразуется в синтаксис модуля node.js, такой как var module = require('module');. В этом случае, если вы не используете относительный путь './module', но только имя модуля зависит от разрешающей способности в папке node_modules. Для AMD он работает аналогично, но я точно не знаю, что является корнем для модулей AMD.

Смежные вопросы