1

関連する質問:

私の前の質問1

私の前の質問2

最近、コードを静的メソッドを持つクラスから、モジュールとエクスポートされた関数を使用するコードに変更しました。これが私が以前持っていたものの例です:

Inner 1.ts
/// <reference path="../typescript/reference.ts" />
module Outer {
    class Inner1 {
        static mvcOnFailure(message: string) {
            var a = 1;
        }
    }
}
Inner 2.ts
/// <reference path="../typescript/reference.ts" />
module Outer {
    class Inner2{
        static mvcOnFailure(message: string) {
            var b = 1;
        }
    }
}

これは問題なく.jsにコンパイルされました。Adminという外部モジュールが1つあり、その中にDialogという別のモジュールとGridという別のモジュールがあります。ただし、プライベート静的関数を作成しようとすると、インテリセンスで関数の横にロックが表示されていても、関数は実際にはプライベートではなく、アクセスできることに気付きました。これを解決するために、クラスの代わりにモジュールを使用するように提案されたので、次のようにコーディングしました。

Inner 1.ts
/// <reference path="../typescript/reference.ts" />
module Outer {
    export module Inner1 {
        export function mvcOnFailure(message: string) {
            var a = 1;
        }
    }
}

Inner 2.ts
/// <reference path="../typescript/reference.ts" />
module Outer {
    export module Inner2{
        export function mvcOnFailure(message: string) {
            var b = 1;
        }
    }
}

reference.ts
/// <reference path="../Outer/Inner2.ts" />
/// <reference path="../Outer/Inner1.ts" />

コンパイルすると、大きな問題が発生します。各.jsには、以下のように外部モジュールにあるすべての関数がすべて含まれているためです。

Inner 1.js

var Outer;
(function (Outer) {
    (function (Inner1) {
        function mvcOnFailure(message) {
            var a = 1;
        }
        Inner1.mvcOnFailure = mvcOnFailure;
    })(Outer.Inner1 || (Outer.Inner1 = {}));
    var Inner1 = Outer.Inner1;
})(Outer || (Outer = {}));

var Outer;
(function (Outer) {
    (function (Inner2) {
        function mvcOnFailure(message) {
            var b = 1;
        }
        Inner2.mvcOnFailure = mvcOnFailure;
    })(Outer.Inner2 || (Outer.Inner2 = {}));
    var Inner2 = Outer.Inner2;
})(Outer || (Outer = {}));

同じモジュールの一部に複数の.tsファイル内の関数があるかのように、このアイデアをあきらめるときが来ました。それにより、.js内のすべてが追加されます。

アップデート:

これについてはよくわかりません。問題は、WebEssentialsをインストールしたことに関連している可能性があります。私はそれを無効にしましたが、他のファイルのjavaスクリプトに表示される1つのファイルの関数で問題が発生することはありません。これは、WebEssentialsが保存時にコンパイルを行う方法に関連している可能性があります。タイプスクリプトは、一度に1つのファイルだけでなく、すべてのファイルに対して一度にコンパイルする必要があるという場所を読みました。あれは正しいですか?

4

1 に答える 1

0

これに続くものとして、TypeScript 0.9アルファプレビュー(安定していませんが、作業中です)には、複数のファイルにまたがるモジュールの定義を容易にするモジュールへの変更が含まれています。

0.9の重大な変更のwikiページから:

'module'キーワードはタイプを作成しなくなりました説明:0.9.0では、名前空間、タイプ、および値の役割がより明確に区別されます。モジュールは名前空間と値にのみ貢献するようになり、タイプには貢献しなくなりました。理由:モジュールの役割がこのように単純化されたことで、モジュールはクラスと関数をより簡単に拡張できるようになりました。

これは問題を解決する可能性がありますが、問題が解決するかどうかを確認するために試してみる必要があります。

于 2013-05-01T08:24:36.927 に答える