2016-01-29 104 views
3

使用Java,導入非常簡單明瞭。Typescript,Requirejs,import語句和別名

您導入用下面的語句:

import fr.domain.MyUtils; 

然後你可以使用它像這樣:

MyUtils.myStaticMethod(); 

你只需要如果在同一個文件有兩個到命名空間MyUtils。

隨着Typescript AMD和requirejs,它似乎更復雜。

這裏import語句:

import u = require('fr/domain/MyUtils'); 

,並使用它的方式:

u.fr.domain.MyUtils.myStaticMethod(); 

相當冗長......

我發現這樣的票價使用別名的唯一方法是進口報表的兩倍:

import u = require('fr/domain/MyUtils'); 
import MyUtils = u.fr.domain.MyUtils; 

這樣做,你可以在一個模塊中寫後:

MyUtils.myStaticMethod(); 

它的清潔,但Eclipse的插件TS得到完全失去了這個和自動完成變得不穩定。在Visual Studio中,自動完成是確定的,但是「F12轉到定義」必須執行兩次,這很煩人。

有沒有更好的方法來做到這一點?或者我們應該儘可能縮短命名空間?

+0

請出示你的'FR /域/ MyUtils'文件 –

回答

2

你做錯了。

您的'fr/domain/MyUtils'模塊應該只導出任何應該是MyUtils的內容。也就是說,它應該是這樣的:

export function myStaticMethod() { /* ...code... */ } 

它不應該被出口一些全局命名空間對象,它不應該被添加任何東西,你從別的地方得到一些全局命名空間對象。模塊文件在目錄中的自然位置是您在使用外部模塊時創建「名稱空間」的方式。

如果你做正確的那麼你的消費者是這樣的:

import MyUtils = require('fr/domain/MyUtils'); 
MyUtils.myStaticMethod(); 

,或者使用ES模塊語法更恰當:

import { myStaticMethod } from 'fr/domain/MyUtils'; 
myStaticMethod(); 
+0

你說得對,我現在明白了。這裏有很好的解釋: http://www.typescriptlang。org/Handbook#modules-模塊的陷阱 當他們描述我在做什麼時,「無需命名空間」: 「因爲外部模塊文件本身已經是一個邏輯分組,並且它的頂級名稱由導入它的代碼,沒有必要爲導出的對象使用額外的模塊層。「 – Ced

+0

截至目前,導入(外部)模塊的首選方式是ES6模塊語法。我認爲你的答案中的一部分需要更多的重點 - 目前,它只不過是一個腳註。 –