2017-11-03 19 views
0

私は活字体に新たなんだと私は複数のファイルにまたがって使用同じ名前空間に問題を持つファイル.TS宣言し、複数の活字体全体で使用したのと同じ名前空間は

import { Model } from './model'; 

export namespace MyCompany { 
    model : Model; 
    export class WebViewer { 
     use() : void { 
     this.model = new Model(); 
     ... 
     } 
     ... 
    } 
} 

ファイルindex.ts

import { WebViewer } from './webviewer'; 

let webviewer = new WebViewer(); 
webviewer.use(); 

MyCompany.WebViewerクラスでMyCompany.Modelを使用し、index.tsファイルでMyCompany.WebViewerを使用する方法に関するドキュメントが見つかりません。

このドキュメントには多くの例が含まれていますが、同じ名前空間が宣言され、同じライブラリの複数のファイルで使用されているケースはありません。

https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#110-namespaces

UPDATE

それはすべてのファイルに名前空間を使用してOKだ場合今、私は自分自身を求めています。おそらく、.d.tsファイルを使用してクラスを名前空間内にエクスポートすることができるので、後でライブラリをAcme.WebViewerなどとして使用することができます。

答えて

1

名前空間の基本的な考え方は、あなたのチームの他の開発者が別のModelクラスを望んでいて、あなたのことを気づいていなかった場合)

名前空間はモジュールを導入して少し古くなっています。あなたは次の操作を行うと、完全に名前空間をスキップすることができます:

model.ts

export class Model { 
    // ... 
} 

webviewer.tsあなたが出て残すことができます

import { Model } from './model'; 

export class WebViewer { 
    private model: Model; 
    use(): void { 
    this.model = new Model(); 
    } 
} 

index.ts

import { WebViewer } from './webviewer'; 

let webviewer = new WebViewer(); 
webviewer.use(); 
+0

私が初めてTypescriptを使い始めたとき、私はwebpackを使ってビルドプロセス全体を見つけ出しました。 Typescriptを学ぶとき、名前空間は良い中間地ですIMHO – Kokodoko

+0

あなたの例ではモジュールはどこに使用されていますか?私が見る唯一の変更点は、 モデルフィールド上のプライベートアクセサーと名前空間の削除です(私はTSにはかなり新しくなっていますので、ごめんなさい。モジュールを明示的に宣言しなければならないと思った – Salaros

0

名前空間を使用する場合はimport名前空間の外からオブジェクトを呼び出すときは、それを呼び出しに含める必要があります:let m = new MyCompany.Model()。また、ウェブビューアのタイプミス(モデル変数は、クラス内で宣言する必要があります)

model.ts

export namespace MyCompany { 
    export class Model { 
     ... 
    } 
} 

webviewer.ts

export namespace MyCompany { 
    export class WebViewer { 
     model : Model; 
     use() : void { 
     this.model = new Model(); 
     } 
    } 
} 

index.ts

let webviewer = new MyCompany.WebViewer(); 
webviewer.use(); 
を持っていました
関連する問題