関連する質問:
最近、コードを静的メソッドを持つクラスから、モジュールとエクスポートされた関数を使用するコードに変更しました。これが私が以前持っていたものの例です:
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つのファイルだけでなく、すべてのファイルに対して一度にコンパイルする必要があるという場所を読みました。あれは正しいですか?