2014-02-17 40 views
0

我在我的代碼中有一個外部模塊的情況。根據建議(請參閱「Needless namespacing」),我試圖避免不必要的名稱空間,並從各處刪除模塊聲明。現在,當模塊中某個函數的參數與模塊中另一個函數的名稱相同時,我遇到了命名衝突。所以我希望我能以某種方式告訴編譯器,它不是參數,它是當前模塊需要調用的另一個函數。考慮:如何在TypeScript中引用匿名模塊?

function a() { 
} 
function b(a: {}) { 
    return a(); /// <--- a problem, I wish there was something like: module.a(); or global::a(); 
} 

有沒有辦法以某種方式克服這個問題,而不改變名稱?

回答

0
function a() { 
} 
function b(a: {}) { 
    return this.a(); ///try using this 
} 

我寧願建議做這樣的:

module Testing { 
    class MyFuncs { 
     public a =() => { } 
     public b = (a: {}) => { return this.a()} 

    } 
} 
+0

那麼,雖然它可能工作,但我不喜歡這種解決方法,因爲'this'是所有類型的'any'的後果。 –

+0

請檢查更新,你會有智能感知 –

0

對於模塊,如果您導出a功能,您可以通過模塊名稱來訪問它。對於全局項目,您需要擴展表示全局根目錄的接口,以便讓編譯器瞭解附加項目。我已經在下面展示了兩個例子。

// Module 
module Example { 
    export function a() { 
     alert('A1'); 
    } 

    export function b(a: {}) { 
     Example.a(); /// <--- I wish there was something like: module.a(); 
    } 
} 

Example.b({}); 

// Global 
interface Window { 
    a:() => any; 
} 

function a() { 
    alert('A2'); 
} 

function b(a: {}) { 
    return window.a(); /// <--- I wish there was something like: global::a(); 
} 

b({}); 

如果沒有這些作品對你的,或許就可以改變你的設計來包裝一個類中的方法爲類成員使用this關鍵字,從局部變量和參數區別開來訪問。