2013-11-08 8 views
0

Похоже, что я должен делать полное именование при доступе к модулю TypeScript в javascript. Это верно?Вызов модуля TypeScript из javascript через RequireJS

Мои Машинопись является:

export module App.editor.menu { 

    export class File { 
     static isOpenEnabled() { 
      return false; 
     } 

     static openClicked() { 
      debugger; 
     } 
    } 
} 

И мой браузер:

Ext.onReady(function() { 

    define(["../../scripts/ribbon", "./menu-handler"], function (ribbon, handler) { 

И я должен назвать "handler.App.editor.menu.File.isOpenEnabled()" вместо " handler.isOpenEnabled() "

Все примеры, которые я видел, не требуют включения пространства имен. Но я не видел примеров, которые наполовину относятся к TypeScript, наполовину javascript, поэтому я считаю, что это может быть иначе.

В этом случае требуется полное пространство имен?

ответ

1

Идея с пространствами имен заключается в том, что вы хотите избежать конфликтов имен и четко указать домен определенного типа или переменной. Это важно в таких вещах, как .NET, где транзитивное закрытие всех необходимых типов загружается в один домен, а столкновение имен будет очень проблематичным.

Во внешнем модуле это совершенно необязательно, потому что код, который загружает вас, позволяет точно определить, к какому идентификатору вы привязаны, а вызывающие абоненты будут «видеть» код, который они явно импортируют.

В общем, вы должны не имеют файл TypeScript, единственным элементом верхнего уровня которого является export module. Переместите все снаружи и положите на него export, чтобы ваши абоненты могли его легко найти. В вашем конкретном примере, файл должен просто сказать:

export class File { ... } 

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

+0

Если я исключил часть модуля, не будет ли это означать конфликт имен, если я создам другой класс File в другом месте? –

+0

Нет. Это идея с внешними модулями - они по-разному находятся в другом пространстве имен. –

+0

Спасибо за информацию, Райан. Я не много делал с RequireJS, и мне всегда было интересно об этом. Кроме того, я представил небольшое изменение для вашего ответа. :) –

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