8

わかりました。ご覧のとおり、プロジェクトで内部モジュールを使用したいと考えています。TypeScript 0.8.1.1には回避策があり、エクスポートされていないモジュール(内部)を定義して、その上にインポートを追加することができます。0.8.2では、これはもう機能しないようです。ここに表示される唯一のオプションは、インポート構文を完全に省略し、ノードモジュールに標準のrequireを使用することです。これが良いアイデアかどうかはわかりませんが、ご意見をお聞かせください。インポート構文を使用するとモジュールが外部(言語仕様)になることは知っていますが、0.8.1.1ではそうではありませんでした。バグかもしれません。

TypeScript 0.8.1.1では、これは機能し、0.8.2では機能しなくなりました。

import path = module('path');
import fs = module('fs');
module SomeNamespace.Controller {
    export class Index {
        ...
    }
}

他の内部モジュールのファイルの上に参照構文を使用して上記のコードを含むファイルを参照し、通常は次のように呼び出すことができます。

var ctrl = new SomeNamespace.Controller.Index;
ctrl.index();

0.8.2では、これが内部モジュールで機能する唯一の方法のようです。

var path = require('path');
var fs = require('fs');
module SomeNamespace.Controller {
    export class Index {
        ...
    }
}

内部モジュールをNode.jsモジュールと混合する他の可能性はありますか?上記のrequireusageに何か問題がありますか(コンパイルして正常に実行されます...)?

4

2 に答える 2

4

TypeScript 0.8.2 は仕様に近づいていると思います。

構文:

import x = module('SomeModule');

具体ExternalModuleReference的には TypeScript 言語仕様の です。

内部モジュールは、次を使用してインポートされます。

///<reference path="SomeModule.ts" />
import x = SomeModule;

しかし、内部モジュールをインポートしてもrequire、JavaScript にステートメントは生成されません。

TypeScript 言語仕様 0.8 - 9.2.2 インポート宣言から取得

インポート宣言:

import Identifier = ModuleReference ;

モジュール参照:

ExternalModuleReference
ModuleName

外部モジュール参照:

module ( StringLiteral )
于 2013-01-23T16:21:40.880 に答える
0

OK、このエラーは TypeScript のバージョンが原因です。TypeScript 0.8.1.1 で外部モジュールをインポートするには、構文を次のようにする必要があります。

export import <moduleName> = module(“&lt;path>”);

これは TypeScript の最新バージョンで確認されたバグです。以前のバージョンに戻すか、構文を変更して v0.8.1.1 と互換性を持たせることができます。これはバグであり、将来のバージョンでは元の構文を使用できるようになるはずです。

これは、このバグの公式スレッドです: http://typescript.codeplex.com/discussions/405800

于 2013-01-23T15:50:52.533 に答える