2016-09-29 177 views
3
模塊級變量和局部變量區分

考慮這個模塊:如何打字稿

export module Example{ 
    let customer : any; 

    export function myExample(customer: string) { 
     // How to reference the module level customer object here? 
     // Is there a standard to make these module level variables Pascal Case to prevent this overlap? 
    } 
} 

myExample功能customer是一個字符串。我如何參考模塊級別customer

如果這是一個類,我可以使用this.customerthis沒有一個模塊在工作,並且Example.customer也不管用,除非客戶是出口......

回答

0

這裏的問題TS的JS生成的版本:

define(["require", "exports"], function (require, exports) { 
    "use strict"; 
    var Example; 
    (function (Example) { 
     var customer; 
     function myExample(customer) { 
      // How to reference the module level customer object here? 
      // Is there a standard to make these module level variables Pascal Case to prevent this overlap? 
     } 
     Example.myExample = myExample; 
    })(Example = exports.Example || (exports.Example = {})); 
}); 

由於客戶沒有被出口,它是作爲私產生。而現在,標準的Javascript變量範圍規則生效,並且無法引用模塊級客戶。最簡單的,最簡單的解決方案,(恕我直言爲模塊級私有變量標準約定)是強調最外面的客戶:

export module Example{ 
    let _customer : any; 

    export function myExample(customer: string) { 
     _customer = customer; 
    } 
} 
2

一般來說,模塊無論是出口類,函數或枚舉等其他元素。

export module Example如本實施例中僅示出指定Example實際上是一個命名空間中,這意味着對myexample中功能的任何引用必須由命名空間名稱預先固定的,即Example.myExample()

如果客戶沒有出口,那麼您是正確的。這是因爲export module Example只是指定一個名稱空間,而不是導出的變量或類。

這是很難猜測,爲什麼你正在使用的不是export classexport module,:

export class Example2 { 
    customer: string = 'Example2.customer'; 
    myExample(customer: string) { 
     console.log(`Example ${this.customer}`); 
     console.log(`Example ${customer}`); 
    } 
} 

這個類實際上是一個模塊,由於使用export關鍵字。

+0

據@RyanCavanaugh http://stackoverflow.com/questions/13255158/when- (這是從2012年開始的,所以它可能已經改變了)'如果你將要有多個實例與每個實例相關聯的數據,那麼class就是方式去。如果你只是將邏輯連接的無狀態函數組合在一起,那麼模塊就更合適了。「對於我的實際應用,在這個例子中,模塊更有意義。 – Daryl

+0

授予。那麼常客的做法是什麼?這不是無國籍的功能?這意味着你正試圖用一個常量值來組合一個無狀態函數? – blorkfish

+0

不知道爲什麼它很重要。現在我把它改成了任何一個。 – Daryl