バリデーションネームスペースのコードを別のファイル/モジュールからインポート(使用)する方法はありますか?
1つの質問で「インポート(使用)」と「ファイル/モジュール」と言っているときは、非常に異なる2つの状況について質問しています。答えはそれぞれ異なります。
import
とモジュールでこれを行う方法はありません。各モジュールは異なるスコープであり、各モジュールにnamespace Validation
を定義すると、異なるスコープの宣言がマージされないため、3つの異なる名前空間を作成します。さて、あなたはdeclare global
を使ってモジュールスコープから抜け出すことができますが、それはモジュールの指定された目的を破ります - グローバルの除去。
これは、モジュールではないファイル(つまり、トップレベルのファイルがimport
またはexport
でないファイル)で行うことができます。しかし、あなたは非モジュラーのjavascript(またはtypescript)に制限されています。 namespace Validation
はグローバルスコープになります。import
とモジュールを使用することはできません。すべてのファイルをコンパイルして連結して、<script>
タグをロードするのに適した単一のスクリプトを生成する必要があります。
も参照してくださいHow do I use namespaces with TypeScript external modules?
これはFoo
どれを使用できるように、いくつかの外部ファイル(現在のコンパイルに含まれていない)で定義された名前空間Fooのは、そこに存在することを宣言し
declare namespace Foo {}
特定の構文バリアントについて
{}
の中に宣言されたものを含むものとします(そして、
{}
は宣言のみを含み、定義はここに含まれません)。
namespace Foo {}
これは、これはまた、名前空間のFooを作成しますが、export
が、それはソースファイルに表示される場所に応じて、異なる意味を持つことができ、名前空間Foo
export namespace Foo {}
を作成します(それはまた、ファイルがモジュールであるかどうかに依存しますしかし、私はexport
がモジュールなしでどのように役立つかの詳細に行きたくはありません。
export
が最上位にある場合は、ファイルをモジュールに変換し、Foo
を他のモジュールでインポートして使用できます(拡張はできません)。 export
がトップレベルにない場合は、再びそれが依存します。エクスポートされた名前空間に含まれている場合は、ネストされた名前空間を定義し、その外部名前空間をインポートしたモジュールがアクセスできます。それがエクスポートされていない名前空間にある場合、export
は私が信じる効果がありません。