2016-11-24 7 views
5

私はTypeScriptが新しく、モジュールと名前空間について読むほど、混乱します。私はモジュールを持っていくべきですか?名前空間に付けるべきですか?私は両方を使うべきですか?助けて!TypeScriptの組織:名前空間?モジュール?混乱

TypeScriptに変換しようとしている既存のjavascript(.js)ファイルがあります。 いくつかの一般的な機能を持つ1つの.jsファイルと、フィルタに固有のいくつかの機能を持つ1つの.jsファイルがあります。

これで、通常はC#で行うように、これをもう少しTypeScriptで整理したいと思います。

この正しい使用法ですか、それともどのように整理する必要がありますか?

私はモジュールを使用していませんか? (どうやって?)

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.htmlでこの上の公式のコメントを見たりhttps://basarat.gitbooks.io/typescript/content/docs/project/namespaces.html

+0

で活字体ディープダイブでのセクションを持ってお勧め?私はjavascriptやtypescriptでモジュールを使ったことがないので。 (実際に初めて私はjavascriptで名前空間を使用しています)。 – juFo

関連する問題