В чем разница между пространствами имен и модулями в typescript

Я использовал typescript через несколько месяцев, и я еще не понял различия между пространствами имен и модулями.

Я знаю, что до того, как они были названы внутренними и внешними модулями, но с обоими я могу импортировать классы из других файлов. Итак, какова разница реальная?

Ответ 1

Пространства имен - это TypeScript способ структурирования кода, когда вы не хотите, чтобы полученный код Javascript использовал загрузчик модуля.

Вы можете найти больше о пространствах имен и модулях в справочнике здесь.

Ответ 2

Как указано в TS-руководстве есть 2 типа модулей: "внутренний" и "внешний". Код во внутреннем модуле написан в Typescript, а "внешний" написан в Javascript.

Чтобы согласовать с новой терминологией ECMAScript 2015, они решили переименовать их следующим образом:

  • "Внутренние модули" теперь являются "пространствами имен".
  • "Внешние модули" теперь являются просто "модулями", чтобы согласовать с ECMAScript

Итак:

  • То, как вы пишете свой код, отличается
  • При использовании модулей классы не отображаются в глобальной области с использованием пространств имен:

Пример:

Скажем, у вас есть общедоступная последовательность пространства имен NamespaceA.NamespaceB.NamespaceC, которая предоставляет открытый класс ClassD. Вы можете получить доступ ко всем этим глобально следующим образом:

window.NamespaceA
window.NamespaceA.NamespaceB
window.NamespaceA.NamespaceB.NamespaceC
window.NamespaceA.NamespaceB.NamespaceC.ClassD

без window.NamespaceA = NamespaceA

и если вы используете модули, вы должны использовать "волшебство" выше