2016-11-24 80 views
5

我是新來的TypeScript,我對模塊和命名空間的瞭解越多,它就越困惑。我應該使用模塊嗎?我應該去命名空間嗎?我應該同時使用嗎?幫幫我!TypeScript組織:名稱空間?模塊?混淆

我已經現有的JavaScript(.js文件),我試圖將轉換爲打字稿文件。 有一個.js文件包含一些通用函數和一個.js文件,其中包含一些特定於過濾器的函數。現在

我想用打字稿更多的組織這一點,因爲我通常會用C#做的。

這是正確的用法還是應該如何組織?

我沒有使用模塊,應該嗎? (如何?)

Company.ts

namespace Company { 

    // nothing yet, but in future it might. 

} 

Company.Project.ts

namespace Company.Project { 

    import Company; // like this? 

    let myVar : string = "something"; 

    export function handyGeneralFunction1(foo, bar) { 
    // ... 
    } 

    export function handyGeneralFunction2(foo, bar, foo, bar) { 
    // ... 
    doInternalCalc(); 
    // ... 
    } 

    export function handyGeneralFunction3() { 
    // ... 
    } 

    function doInternalCalc() { 
    // ... 
    } 
} 

Company.Project.Filter.ts

namespace Company.Project.Filter { 

    import Project = Company.Project; // like this? 

    export function initializeFilter() { 
     // ... 
     initMetadata(); 
     // ... 
    } 

    function initMetadata() { 
     // ... 
     Project.handyGeneralFunction3(); 

     let helper : FilterHelper = new FilterHelper("aaaa,bbbb"); 
     let res:string[] = helper.parseData(); 
    } 

    function foo() { 
     // ... 
     let x :string = Project.myVar + " else"; // can I use myVar here? 
    } 

    // a class in the namespace 
    export class FilterHelper { 

     data: string; 

     constructor(theData: string) { 
      this.data = theData; 
     } 

     parseData() : string[] { 
      // ... 
      return new Array<string>(); 
     } 
    } 

} 

回答

1

如果您有可能真正改善項目結構,那麼您應該使用模塊而不是名稱空間。根據項目的規模,這可能需要一些努力。如果您的應用程序是沒有那麼大,你不希望投資於切換到不同的編譯系統,可以處理實時模塊

介紹命名空間可能是有用的。使用名稱空間並不比包含函數和變量的一些命名全局變量多得多。這很容易讓你感到困惑,因爲你沒有任何適當的依賴結構。您需要注意以正確的順序導入所有文件,以使命名空間正常工作。您使用的導入語法甚至可以省略,因爲您無論如何都只引用另一個全局對象,該對象需要在該時間點初始化。

所以命名空間可能是你的第一步,如果你沒有做你的代碼的任何變化較大的可能性。對於面向未來的設置,我肯定會建議使用真實模塊。但請注意,這不是免費的。

如需進一步信息,我建議看看這個官方的評論在https://www.typescriptlang.org/docs/handbook/namespaces-and-modules.htmlhttps://basarat.gitbooks.io/typescript/content/docs/project/namespaces.html

+0

在打字稿深潛的部分,你可以給這個代碼將如何看起來像模塊的例子嗎?因爲我從來沒有在JavaScript或打字稿中使用過模塊。 (實際上我第一次使用JavaScript中的命名空間)。 – juFo