在TypeScript中的命名空间下导入外部模块?

时间:2014-02-19 16:55:03

标签: typescript

我有一组旨在使用UI的模块,所以这就像文件夹一样:

ui/
  dialogs.ts
  tabs.ts
  progress-bar.ts
  menus.ts

我想在命名空间下导入这些模块,而不是这样做:

import uiDialogs = require('ui/dialogs');
import uiMenus = require('ui/menus');

我希望我能做到这样的事情:

import ui { 
  dialogs: require('ui/dialogs'),
  menus: require('ui/menus')
}

有没有办法在TypeScript中执行此操作?

3 个答案:

答案 0 :(得分:1)

在TypeScript中无法直接执行此操作。 AMD模块的代码生成并没有真正适用于此 - 模块名称位于顶层,因此编译器必须使用一个名称来为您使用。

您可以模拟编译器为实现此目的而必须执行的操作:

import __k = require('ko');
module imports {
    export import ko = __k;
}
var x = imports.ko.whatever;

答案 1 :(得分:0)

如果我理解你的问题,你可以这样做:

import dialogs = require('ui/dialogs');
import menus = require('ui/menus');

var ui = {dialogs: dialogs, menus: menus};

答案 2 :(得分:-1)

我建议你在ui文件夹中创建一个index.ts:

ui/
  dialogs.ts
  tabs.ts
  progress-bar.ts
  menus.ts
  index.ts

内容如下:

import uiDialogs = require('ui/dialogs');
export var dialogs = uiDialogs;
import uiMenus = require('ui/menus');
export var menus = uiMenus;

和用法:

import ui = require('ui/index');

这也是nodejs推荐的模式。您可以在此处投票选择相关的TypeScript功能:https://typescript.codeplex.com/workitem/2125您甚至不需要键入/index,因为nodejs已经假定了这一点。 TypeScript可以轻松地为node / amd编码gen。