2016-10-26 25 views
1

我在理解如何正確創建打印稿模塊時遇到了一些困難。如何使用手寫板模塊

我想要實現的是每個文件1個模塊,沒有變量泄漏到全局範圍中。例如,如果我有一個名爲「shoppingCart.js」的js文件,其中有一個名爲「addItem()」的函數,我希望只能通過「shoppingCart.addItem()」訪問addItem。 。

我可以通過創建shoppingCart.js並在其中放入addItem()函數來實現此目的,但乍一看,似乎addItem()函數是全局作用域。

如果我將shoppingCart.js的內容包裝在一個名爲「shoppingCart」的模塊中,看起來好像我得到了我之後的封裝,但是,當我導入模塊時,就像我必須將它命名爲double,例如:從「./shoppingCart」 shoppingCart.shoppingCart.addItem

進口購物車()

我知道我可以只改變import語句變量別的東西,但我不希望,我只想輸入「shoppingCart」。並可以訪問所有導出的函數類和變量。

我是否應該使用「module」關鍵字? 我想在模塊的根目錄下使用「module」,並且只使用類作爲對象容器(在適當的情況下可能是高度相關的函數)。

我tsconfig.json有利益以下屬性:

"target": "es5", 
"module": "commonjs", 
"moduleResolution": "node" 

我不知道這是否有差別,但我允許的Visual Studio 2015年到.ts文件轉換爲.js文件文件,然後使用瀏覽器和gulp構建過程,將它們連接成一個文件。

回答

1

總之。

我假設你正在做的只是用全局函數導出整個文件。當你應該使用一個類,並創建一個基於你想例如公開哪些功能:

cartCaller:

shoppingCart.ts

export class ShoppingCart { 
    private _cartNum: number; 

    constructor(){ 
     this._cartNum = 1; 
    } 

    public class getCartNum(){ 
     return this._cartnum; 
    } 
} 

如下類現在可以使用。 ts

import {ShoppingCart} from './shoppingCart'; 

const cart: any = new ShoppingCart(); 
console.log('You have : ' + cart.getCartNum() + ' carts'); 

希望這能回答你的問題。

- 編輯: 這可能有助於理解更詳細的模塊。

How do I use namespaces with TypeScript external modules?

+0

謝謝。 我的意圖是暴露「模塊」中我以「導出」作爲前綴的任何內容。 爲什麼我錯誤地使用模塊關鍵字? 看起來像「模塊」關鍵字可能只是一個命名空間的等價物,僅此而已。這是正確的嗎? – Steviebob

+1

我不是一個ts專家,但它真的取決於你在做什麼。實際的關鍵字'模塊'我見過用於輸入定義文件(somefile.d.ts)。我還沒有進入直接使用模塊關鍵字的實例。考慮到這一點,我同意通常當你在ts文檔中看到模塊時,他們引用文件的命名空間(即模塊)。這有幫助嗎? – CriCri