TypeScript で Titanium Mobile を遊ぶ

TypeScript なる JavaScript 系の新言語が Microsoft から発表されました。既に使えるようになっていて、 npm がインストールされていればコマンド一発で使えるようになります。

この TypeScript ですが、 JavaScript のスーパーセットなので既存のコードは既に TypeScript でもあるし、 TypeScript の記法を使ってコンパイルすれば JavaScript にも変換できるという代物です。

言語自体は Class や private 修飾子などが用意されていますが、これらが JavaScript  に展開されたときには function と prototype になったり、跡形も無くなったりします。つまりは、開発中のみの制約として機能します。

この手の言語が登場すると、果たして Titanium Mobile では使うことができるのかが気になるところだったので、ちょっとだけ試してみました。

名前空間

とりあえず名前空間から。

このコードが、

こうなる。コンパイル時に Ti なんていうオブジェクトはスコープ中に無いよと言われるけども、別にコンパイルが止まることはなく JS に変換してくれる。

クラス

クラスも書ける。

このコードが、

こうなる。ちょっとだけ、すっきりと書ける。 TypeScript の constructor がポイント。デフォルトの引数を指定しておくと JS に展開したときに良い感じに処理してくれる。もちろん、 extends も使えますし、 interface も使えます。

アロー関数式ですっきり関数定義

関数を => を使ったアロー関数式で定義できます。 function を書かなくても良いというやつですね。

単純な置き換えというわけではなく、スコープもよしなに制御してくれます。上の例では debugConsole という関数の中で this.tabGroup を呼んでいるので、本来ならば this は debugConsole を指してしまいます。

JS 単体ならばそんなプロパティ無いよということで undefined になりそうなものですが、 TS ならば JS 展開時に関数が存在しているスコープを指してくれるようになります。良くある var that = this; みたいな処理を入れてくれるわけですね。

CoffeeScript と比較して

単純に Titanium Mobile で使うならば CoffeeScript も TypeScript も極端な差は出ないように感じる。とはいえ、 JS の糖衣要素が強い CS に比べると TS の方がフォーマルな感じ。 private や public 修飾子や、 interface が使えたりするあたりは Java 屋さんからは受けが良いのかもしれない。

TS は ECMAScript 6 の実装を先取りしているらしいし、 JS のスーパーセットだから仕方がないのかもしれないけども、セミコロンだけは無くしてほしかった。単純な記述量の削減という意味では CS は圧倒的。

CS は JS の自由奔放さがそのままなので、もうちょっと何とか制御しやすくしたいと考えたら、 TS を選ぶというのも有りだと思います。だから、誰か、 CoffeeTypeScript を作ってください( ゚д゚ )

とりあえず適当に遊んでみましたが、まだまだ TypeScript 自体 PREVIEW の字が残っている代物ですし、 ECMAScript 6 だって策定中のものです。お試し程度に使ってみるか、個人プロジェクトで遊んでみるのがベストだと思いました。

Titanium Mobile でも使える方言が CS 以外にも現れたのは嬉しいですね。