数日触ったTypeScript雑感
TypeScriptすげぇ!
ここ数日、TypeScriptを使ってSVGの操作をしてみた。 クラスが使えて役割が明確になるし、スコープは侵食しないし、ものすごく書きやすい。 型のチェックも比較的安心して実装できるし、出力されるJavaScriptは人が書いたかのうような読みやすさ。 もっともっと便利なこともあるんだろうけど、数日しか使ってないのでこういう基本的なところの扱いが目立つ。
逆に言うと、JavaScriptでもクラスが使えて、スコープの扱いが変わるとだいぶ扱いやすい言語になるのではないか?
JavaScriptの緩さも好きだけど、クラス定義がめんどいとか、スコープがないとか、thisがどれを表しているのか?とか、その辺はいただけない。
最近はコードを書いたことない人がプログラムってどういうものか、感覚を得るためにはどうしたらいいか?と考えることが多いんだけど、TypeScriptはありかもしれないと思った。 いや、実際のところ、JavaScriptの簡単なところは知ってないとつらいのかもしれないけど、TypeScriptはそれくらい魅力的ってこと。
あ、重要なのを書き忘れるところだった。 TypeScriptのStructual Subtypingが便利。 duck typingみたいなものだと言ってしまえばそれで通じる人もいるかもしれない。 インターフェイスを定義すること無く f({ x: number; y: number; }) { … } と定義しておけば、xとyを有する型が許容される。 型が明確であっても、使わないプロパティだってあるだろうし、とりあえずこれを持たせて実装を進めてみるか!ってことも出来る。 使ってみればわかるけど、何かと楽で便利。
サーバーサイドもいけるんじゃない?
TypeScriptすげぇ!ってところから、 もしかして、サーバーサイドもこれで簡単に済んじゃうんじゃない? ということがよぎり、Node.jsをいじってみた。 結果から言うと、う〜んいまいち。 Node.jsもろくに触ったことない状態からのスタートだったからってのはあるんだけど、そうではない部分でも気になることはあった。
既存のライブラリ
JavaScriptの既存ライブラリを使おうと思った時にTypeScriptがコンパイルするために.d.tsというファイルが必要になる。 jQueryとか、有名どころは揃っているんだけど、まだ少ない。 https://github.com/borisyankov/DefinitelyTyped https://github.com/soywiz/typescript-node-definitions こんな感じに大量に用意してくれてもいるんだけど、使いたかったiconvがなかった。 iconvのインターフェイスくらい自分で定義すればいいだけではあるんだけど、日本語周りはやっぱり出遅れる感はある。
Node.jsはUTF-8しか扱わないという好みな部分ではあったんだけど、別サーバーからのレスポンスがShift_JISだったりすると…どーしよ…となる。
中途半端
TypeScriptがECMAScriptの先取りという特徴が邪魔をしているような気もしている。 いっそのこと、JavaScriptに変換できる言語ってだけでECMAScriptは意識しない方がよかったのでは?と思ってしまった。 個人的に欲しい機能といえばこんな感じ。 * 名前付き引数 * returnの省略 * DefinitelyTypedのオプション化(定義がないものはanyとして扱う)
出力されるJavaScriptがすごく読みやすいというのは嬉しいことだけど、文法自体はCoffeeScriptの方が好みだな。
“中途半端” という表現をしたけど、これが特徴であり、いいとか悪いとかそういうことではなく、単に好みとそぐわないところだな…と感じた部分。
まとめ
サーバーサイドもTypeScriptじゃ〜!!と思ってたけど、やっぱりScalaにしとこうかな?と思ってる。 TypeScriptでいいやって思えたとしたら、Raspberry Piのようなちょっと非力なマシンでも動かせて楽しそうだと思った。 Java VMはRaspberry Piにはきついから。
TypeScriptが気になってる人は数日何かを書いてみることをおすすめします。 言語だから好みはあるけど、いい言語だし、数日でちょっとは何かを感じられると思う。
# 例のやつ、CoffeeScriptで書き直そうかな…。