2016-04-18 22 views
0

私はangularのアプリケーションを持っています。typescriptに登録されています。configの登録はまったく邪魔にならず、巨大です。typescript - インポートに名前空間が含まれていません

私はそれを複数のconfig(fn)セクションに分割し、特定の動作を独自のクラスにカプセル化し、そのページから多くのロジックを移動しました。それはそれを掃除しようとするスマートな方法のようだった。

新しいクラスはそれぞれ次のようになります。そう戻って私のmain.ts

namespace config { 
    export class http { 
     constructor($httpProvider: ng.IHttpProvider){ 
      // $httpProvider configuration 
     } 
    } 
} 

、私のmoduleを作成し、すべてのものを登録したファイルは、私はそれらを超えるインポートします。

import { http } from './config/http'; 
import { router } from ./config/router'; 
// etc. 

しかし、名前空間はこれの一部ではないようです。私はそれらのように電話することはできません...

config(config.http) 
config(config.router) 
// etc. 

私はそれらを持ち込む際に新しいエイリアスを与える必要がありました。

import { http as configHttp } from './config/http'; 
import { router as configRouter } from './config/router'; 
// etc. 

なぜですか?名前空間の定義をそのまま維持し、私が目指していたもっと簡単な方法を使うためにできることはありますか?

+0

名前空間はグローバル変数を作成するため、import文を実行する必要はありません。すべてのJavaScriptファイルがHTMLファイルに読み込まれていることを確認してください。 – rgvassar

答えて

1

インポートステートメントを使用している場合、あなたの名前空間は冗長です。ここで

import { http } from './config/http'; 

それはあなたが取得しているものですので、あなたがそのファイルにのみ、HTTPクラスのために求めています。

また、何かがmodule configで、namespace configでない場合は、
Namespaces and Modules、より正確にはNeedless Namespacingとお読みください。

+0

私はこれらの両方を何度も読んだことがあります。彼らは本当に助けにはなりません。さらに、この文書では、「名前空間の一般的な考え方は、論理的な構造のグループ化と名前の衝突を防ぐことだ」と明らかにしています。論理的に類似した構造をグループ化する。 – Ciel

+0

@Cielその文章を読み続けると、モジュールファイル自体がすでに論理グループになっていて、そのトップレベルの名前がインポートされたコードで定義されているため、エクスポートされたオブジェクトにモジュールレイヤーを追加する必要はありません。 namespaceは、モジュールを使わず、すべてのファイルを異なる '.js'ファイルにロードし、' new config.http() '(importなし)のように使うだけで便利です。 –

+0

私は他のアイデアは開いていますが、彼らは別々のファイルのままで一緒にグループ化するだけです。私は、あなたがそれらを呼び出すために使用する名前と異なるクラス名を維持するための良い推論を見ることができません。 – Ciel

関連する問題