altJSは必要だろう、ということでTypeScriptを触ってみた。
が、moduleを使ったコードが動かないということが分かり、2013/11/27時点での導入は時期尚早という結論を得た。
以下、やったこと。
Jabara.ts
export module Jabara {
export class Animal {
constructor(private name: string) {
}
cry() {
console.log(this.name);
}
}
export class Dog extends Animal {
cry() {
super.cry();
console.log("Bow!");
}
cryLazily() {
setTimeout(() => {
this.cry();
}, 3000);
}
}
}
module B {}
main.ts
import m = require('Jabara');
new m.Jabara.Dog('アロー').cryLazily();
moduleを含むTypeScriptソースはcommonjsとamdの2つの方式(?)でコンパイル出来るのだけど、その両方で試してみて動かない。
commonjsの場合、require
関数がないので動かない。
amdの場合define
関数がないので動かない。
困った。
CoffeeScriptは静的な型がない点で、あまり使うのに気が進まない。どうしたものか・・・
さっそく追記
現時点でmoduleをうまく使う方法がQiitaにて紹介されていました。
これさえやれば大丈夫! TypeScriptのImportが取っ付きにくい人向け
これを読んで、次のようにコードを修正したら動きました。
Jabara.ts
module Jabara {
export class Animal {
constructor(private name: string) {
}
cry() {
console.log(this.name);
}
}
export class Dog extends Animal {
cry() {
super.cry();
console.log("Bow!");
}
cryLazily() {
setTimeout(() => {
this.cry();
}, 3000);
}
}
}
module B {}
main.ts
/// <reference path="Jabara.ts" />
new Jabara.Dog('アロー').cryLazily();
はまりポイントあり。
Jabaraモジュールをエクスポートしたかったので、当初は
export module Jabara {
と書いていたら、これがまずかった。exportを省いて
module Jabara {
と書けばOK。うーん、分かりにくい。