TypeScript 0.9.1.1でmoduleのビルド結果がおかしくなることがある問題のメモ

なんかTypeScript 0.9.1.1やってたらえらい細かい問題を見つけたのでメモ。
moduleを使っていて、かつ複数ファイルを使っていて、かつTypeScriptのプログラムでエラーにならない小さなミスをしていた場合にだけ起きる。


多分普通出くわさないと思うけど、実際に俺は遭遇した。

a.ts

module C {
	export class A {
	}
}

b.ts

module C {
	export class B {
		test(a: A) {
			var a = new A();
		}
	}
}

出力してほしいb.js

var C;
(function (C) {
    var B = (function () {
        function B() {
        }
        B.prototype.test = function (a) {
            var a = new C.A();
        };
        return B;
    })();
    C.B = B;
})(C || (C = {}));

出力されるb.js

var C;
(function (C) {
    var B = (function () {
        function B() {
        }
        B.prototype.test = function (a) {
            var a = new A();
        };
        return B;
    })();
    C.B = B;
})(C || (C = {}));

遭遇する問題

new C.B().test(null)でリファレンスエラー。
なおb.tsとa.tsが一ファイルの場合、BにとってAはC.Aとしなくてもわかるので大丈夫。

解決策

varを消そう。

module C {
	export class B {
		test(a: A) {
			a = new A();
		}
	}
}

そこでvarがついてるのは普通にミスなんで、消そう。消せばちゃんとC.Aとして出力してくれる。