23

.ts ファイルごとに 1 つのクラスが必要だとします。次のような 2 つの .ts ファイルがあります。

export module MyClasses { export class A {} }

export module MyClasses { export class B {} }

私はこれを行うことはできません:

import MyClasses = module('A');
import MyClasses = module('B');

別のファイルでクラスを定義し、それらを同じ「名前空間」に配置するにはどうすればよいですか? さらに、次のようなことをしなければなりません。

MyClasses.MyClasses.A

それ以外の

MyClasses.A

この追加レベルの階層のポイントは何ですか? モジュールファイルに複数のエクスポートされたモジュールを含めることができますか? 私がこれまでに見つけた最善の解決策は、「エクスポート モジュール」を削除することです (AMD をコンパイルするときは「エクスポート クラス」で十分であるように思われるため)。これにより、クラスが 1 つ上の階層レベルに移動します。それで:

import AModule = module('A');
module MyClasses{ var A = AModule.A; }
import BModule = module('B');
module MyClasses { var B = BModule.B; }

完璧に機能しますが、厳密には簡潔ではありません。これを行うより良い方法はありませんか?

4

3 に答える 3

3

外部モジュールでこれを達成するためのより良い方法はないと思います。言語仕様では、外部モジュールを次のように定義しています。

外部モジュール (セクション 9.4) は、外部モジュール名を使用して参照される個別にロードされるコード本体です。外部モジュールは、少なくとも 1 つのインポートまたはエクスポート宣言を含む個別のソース ファイルとして記述されます。

さらに下には、内部モジュールは無制限であり、複数のファイルに拡張できると書かれています。

内部モジュールは「制限のない」ものであり、共通のルート (セクション 2.2 で定義) に関連する同じ修飾名を持つ内部モジュール宣言は、単一のモジュールに貢献します。

外部モジュールに関する同様のステートメントについて他に言及しているものは見つかりませんでした。私はそうではないと確信しています。モジュールの読み込みが必要な場合は、さまざまなファイルから読み込まれた型にアクセスするための参照パスを使用する必要があります。

ただし、私にとっては、内部モジュールを使用する方がよいように思えます。次に、モジュールを2つのファイルに簡単に広げることができます

export module MyClasses { export class A {} }

export module MyClasses { export class B {} }

それらを参照パスでスコープに入れる

///<reference path='A.ts'/>
///<reference path='B.ts'/>

次に、例のようなモジュール名でそれらを参照するだけです

var a = new MyClasses.A();
于 2012-10-14T16:35:02.450 に答える
1

不適切な変数名を許してください。私はこれを Visual Studio でテストしていました。インポートステートメントに異なる名前を使用すると、うまくいきました。

import x = module('A');
import y = module('B');

x.MyClasses.A;
y.MyClasses.B;

別の方法として、参照コメントを使用して同様の効果を得ることができますが、これは、モジュールの読み込みを使用している場合ではなく、バンドルしている場合に適しています。2 つの宣言exportからキーワードを削除する必要があります。MyClasses

///<reference path='A.ts'/>
///<reference path='B.ts'/>

var x = MyClasses.A;
于 2012-10-14T16:16:27.543 に答える