2014-02-19 91 views
0

我有,旨在與UI工作模塊的集合,所以這是它看起來像在文件夾中的術語:在TypeScript中的名稱空間下導入外部模塊?

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') 
} 

有沒有辦法在打字稿做到這一點?

+0

import'foo = ... import bar = ... var ui = {foo:foo,bar:bar};'' –

回答

1

沒有辦法直接在TypeScript中做到這一點。 AMD模塊的代碼實際上並不適用於這一點 - 模塊名稱來自頂層,因此編譯器必須爲您提供一個名稱。

可以效仿的行爲,編譯器會做來實現這一目標,但:

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

這個方法只適用於在子模塊中定義的類型, 'imports.ko.whatever'只能在預期類型的​​上下文中使用,如果在函數的主體中使用TypeScript投訴'Cound not find symbol'imports'' –

0

如果我正確理解你的問題,你可以做這樣的事情:

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

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

我建議您在ui文件夾內創建一個index.ts文件夾:

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

with內容等:

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可以爲節點/ amd輕鬆編碼gen。

+0

編輯這篇文章包含一些信息應該發表評論。我把它回滾了,但是如果你覺得合適,你可能希望查看原始意圖(關於'var')並更新。 –

+0

當我使用'import'時,我無法從子模塊訪問函數,當我使用'var'時,我不能訪問這些類型,當我同時使用'export import Dialogs = uiDialogs'類型和'出口var對話框= uiDialogs'功能它的工作,但有2個功能和類型單獨的命名空間是一個殺手。 –

+0

@ 1365在您已經使用外部模塊時不建議使用「內部」模塊:www.youtube.com/watch?v=KDrWLMUY0R0&hd=1 – basarat

相關問題