7

ノード内で typescript を使用することを検討しており、現在、///<reference.../>純粋に内部モジュールを使用する構文を介して typescript を使用することに慣れています。ただし、大規模なプロジェクトでは、すべて相互リンク参照を持つ他のモジュールを参照するモジュールを持つことができるため、これは扱いにくくなる可能性があります。

したがって、このノード プロジェクトでは、すべての論理コンポーネントを以前と同じように内部モジュール/クラスとしてグループ化しようと考えていました。そのため、それらはすべて内部で相互に参照しますが、基になるクラスなどを公開する 1 つの外部モジュールを介してそれらを公開します。

このように、構文は、次のようなメカニズムを必要とする既存のノードと非常に似ています。

import database = require("my-external-db-module.ts");
var connection = new database.Connection(someUrl);

それよりも

///<reference path="my-internal-db-modules.ts" />
var connection = new Database.Connection(someUrl);

そして、構文は次のようになると思います。

///<reference path="all-my-internal-module-files-etc.ts" />
///<reference path="..." />
export module SomeExposingModule
{
   // Not quite sure what to put in here to expose the internal modules
}

では、この種のことや同様のことを行った他の人に何らかのベストプラクティスはありますか?それとも、誰もが複雑なものに内部モジュールを使用することに固執しているのでしょうか?

4

3 に答える 3

5

これが悪い習慣かどうかはわかりませんが、問題を解決した方法は次のとおりです。

最初に問題の簡単な要約を再度示します。

名前空間の下にすべて論理的にグループ化された複数のファイルがあります。たとえばFramework、その下のすべてのファイルは、またはFramework.*などになります。次に、これらはすべて経由でコンパイルされるため、これらすべてをファイルに出力します。Framework.DatabaseFramework.UnitOfWorktsc --out framework.js ...framework.js

上記は問題ないように思えますが、 --out を使用するとモジュールをエクスポートできません。これは、複数のファイルにまたがるためです。ノードが機能するには、モジュールを何らかの方法でエクスポートする必要があるため、基本的に手動で行う追加の typescript ファイルを追加しましたこれはコンパイルで私にとって:

// exporter.ts
module.exports = Framework;

したがって、これがコンパイルに追加された最後のファイルであるとすれば、次のtscような結果になります。

// Framework.js
var Framework;
(function (Framework) {
    // lots of good stuff
})(Framework || (Framework = {}));
module.exports = Framework;

したがって、これにより内部モジュールが正常にエクスポートされ、現在含まれている exporter.ts ファイルにより、エクスポート宣言が含まれます。

したがって、これが悪い習慣であるかどうかはわかりませんが、これにより、名前空間でレイアウトされ、適切なファイル構造に分散された再利用可能なモジュールと、コンパイルされた単一のモジュールの両方の長所を活用できます。参照または nodejs require によって含まれています。

したがって、使用法は次のようになります。

var Framework = require("./framework");
var database = new Framework.Database.DbConnection();
于 2013-07-31T10:27:44.233 に答える
2

これらの問題の一部をスムーズにするのに役立つアイデアがいくつかあります。

参照が多い場合は、参照ファイルを使用して管理できます。例えば:

参照.ts

///<reference path="a.ts" />
///<reference path="b.ts" />
///<reference path="c.ts" />
///<reference path="d.ts" />

他のすべてのファイル...

///<reference path="references.ts" />

これで、参考文献の集中リストができました。これは、各ファイルの先頭に参考文献のリストを織り込むよりもはるかに簡単です。

あなたの特定のケースでは、importステートメントを使用してNodeJSにモジュールをロードさせる傾向があり、ファイルシステムを使用してモジュールをグループ化します。

于 2013-07-18T12:17:28.583 に答える
1

できることは、一連の TS ファイルを .js + d.ts の組み合わせにコンパイルすることです。たとえば、次のように作成out.jsし、out.d.ts

tsc a.ts b.ts --out mod.js --declaration

そして(うまくいけば)以下がうまくいくでしょう:

///<reference path="mod.d.ts">
var mod = require('mod')
于 2013-07-18T10:07:30.200 に答える