Sencha Touch2をTypeScriptでちょっと書いてみた。

気付いたら本気で一年の半分が過ぎそうです。最近時間の流れの早さが確実に早くなってきているのを実感しているので、もうちょっと週末のだらけっぷりをなんとかせんとなー、と思うこの頃です。

ところで、諸事情がありましてSencha Touch2をTypeScriptでちょこっと書いてみたので、その感想をばと思います。

Sencha Touch(というかExtjs)はTypeScriptには向かない

量は少ないのですが、ちょこっと書いてみたかぎりでは、ぶっちゃけこれ以上の感想があまり浮かばないというか・・・。

  • TypeScriptのモジュールとかClassとかが基本使えない
    • そもそもExtJSのモジュールとかクラスとかの追加方法からして、TypeScriptにまったくフレンドリーではないので
  • 型定義ファイル
    • ExtJS自体が巨大なので、公開されているファイルをありがたく使わせてもらってますが、あまり効果が実感できないというか・・・。
  • オブジェクトを超多用
    • オブジェクトを書く分には、TypeScriptもJavaScriptも変わらないので、正直特に変わりません。
    • それぞれのxtypeに対応する型定義はあるのですが、結局渡しているのはただのオブジェクトなので、毎回<...>でオブジェクトを静的キャストしてやらないと、補完とかもまったく効きません。なんということでしょう。
  • クラスの定義とかで() => {}が諸事情で使えない
    • () => {}は普通に使う分には便利ですが、クラス定義の時に使ってしまうと、windowとかそのあたりをthisとしてしまうため、結局JavaScriptで書いているのと変わらないという・・・。

な感じで、本来TypeScriptで重要なファクターとなる点がかなりの割合で潰されてしまっているため、TypeScriptを書くよりかは普通にJavaScriptを書いた方が、コンパイルとか無視できる分むしろ早くなるんでは?という例になりそうです。

CoffeeScriptの方がいいかも

オブジェクトを多用する書き方なので、あまりインデントでブロックを表記するやりかたは好みではないのですが、CoffeeScriptの方が楽に書けるような気がします。関数の書き方としても、TypeScriptの()=>{}が(大抵)使えないのに対して、CoffeeScriptの場合は常に() -> が使えるので、毎回functionを書きたくないからTypeScriptを使ってるのに結局functionを打ちまくる、というなんともな状況は回避できます。

CoffeeScriptを使った場合、TypeScriptで得られる利点(型定義によるコンパイルエラーとか)は得られませんが、その分早く書ける(はず)なので、テストを厚めに書く、というまさにRuby的な形でやることができるんではないでしょうか。

つまるところ

TypeScriptはJavaScriptを型定義を通して、固く使うことができる、ということが基本的な利点だと思います。しかし、JavaScriptの利点である柔軟性を十全に生かしたプロダクトで、しかもExtJSレベルで仕組みが構築されてしまっていると、TypeScriptを使うことによる利点が、TypeScriptの利点を享受するための作業によるコストを下回ってしまうのではないかと懸念しています。

ここはあれですね。TypeScriptでExtJSを書き直せばきっと誰かが幸せになれるんだと思います。そうなったら既存のExtJSとは似てもにつかないものになるだけでしょうが。

JavaScriptはfunctionを短く書く方法と、関数とグローバル以外の変数スコープができるだけで大分使いやすくなると、改めて感じた今日この頃でした。