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として出力してくれる。