Kokudoriing

技術系与太話ブログ

TypeScriptってなにさ

TypeScriptは10/1にMicrosoftが発表したJavaScript互換の新言語。
C#設計チームのチーフであるAnders Hejlsbergらによって開発されただけあって素敵構文。

というわけで続々とJavaScript周りの言語が溢れかえってるわけですが。
最近だとDeNAJSXとかが話題になってましたね。

・そもそも何故JavaScriptがあるのに似たような言語がいっぱい出てくるの?
これはもうJavaScriptが色々とアレな言語だからとしか言い様がないわけですが。
まずJavaScriptにはモジュール機構、つまりファイル分割の概念が無いです。
なのでJavaScriptで大規模開発なんてファッキンな訳です。

・しかしECMAScript5が2009年の末にリリースされたばかりなのでは?
ECMAScript5は後方互換性を最大限重視した結果言語レベルの変更が殆どなされていない。
次のECMAScript6は後方互換性を切り、モジュール機構やらを導入予定。
が、ECMAScript6は現在絶賛使用策定中。

つまり、本音を言うとECMAScript6を使うのが一番良いけど正直待ってられないというお話。


さて、本題。
JavaScript周りの言語には幾つかの種類があります。
1.単純にJavaScriptのシンタックスシュガー(つまりコンパイラをマクロとして扱う)という位置付けの言語。
2.言語として独自の機能は有するが、最終的にはJavaScriptに変換する言語。
3.完全に別言語なクライアントサイドスクリプト言語

1.はCoffeeScriptとかが有名ですね。
CoffeeScriptは言語の見た目を変えるにとどまっており、最終的にJavaScriptに変換されます。
なので、CoffeeScriptはJavaScriptファイルとCofeeScriptファイルを区別せず扱います。
(JavaScriptで記述されたコードをCoffeeScriptで記述されたコードから呼ぶことと、
CoffeeScriptで記述されたコードをJavaScriptで記述されたコードから呼ぶことに差がない。)

3.はDartが有名ですね。というかこれ以外知りません。
完全に別言語なのでDartとJavaScriptは直接的な関係性がありません。
ブラウザで動く言語が増えたよというだけのお話。
ただ、Dart自身は普及目的のため、JavaScriptにコンパイルすることが可能です。

2.が今回取り扱うTypeScriptや、先述のJSX、あとはHaxeとかそうです。
これは1.と3.の折半案です。
TypeScriptは静的型付け言語です。が、JavaScriptは動的型付け言語。
なので、TypeScriptをJavaScriptに変換すると、型情報は綺麗サッパリなくなってしまいます。
しかし、TypeScriptをJavaScriptにコンパイルする時に、全ての型が静的に決定されている状態であることがコンパイラによって保証されます。


この3種類の中でどれが一番いいのかは僕にはわかりませんし、要件によって変化するものだと思います。
ただ、TypeScriptはJSXやHaxeと違いECMAScript6を意識して設計されています。
(JSXやHaxeは策定が中止されたECMAScript4を意識して設計されている。)

なので、ECMAScript6が普及すれば移行コストは他と比べると安くなるのかな、と。
また、TypeScriptがECMAScript6の策定に大して影響を与えるものになるかもしれません。
(実際に、CoffeeScriptはECMAScript6の策定に対して大きな影響を与えています。)

ただ、ECMAScript6が仕様策定されたからといって、すぐに移行できるわけは当然無く。
(ECMAScript5の策定が3年前なのに、世間はまだIE6を殺そうとか言ってる。IE8は超現役。)
しかし、例えばTypeScriptらがECMAScript3,5,6の全てに対応したコンパイルをしてくれると、
ブラウザの以降の土台はかなり簡単にできるのではないかなとか。
(まだECMAScript6の仕様が策定されていないので、現実問題として複数同時サポートが可能かはわかりませんが。)

そしてなにより嬉しいのはMicrosoftの力の入れよう。
発表した初日からやたら高性能なWebエディタ(IntelliSenseが効く)を搭載したトライアルページや、
90ページ近く書かれた仕様書(残念ながら英語)(PDF注意)が用意されていたりと某Dartと比べるとげふんげふん。

さらにVisual Studio用のプラグインも用意されていたり。
コンパイラ自体はnodeで配布されており、TypeScript自体はオープンソースです。

また後日色々と記事を書こうとは思うのですが、
JavaScriptファイルに型注釈ファイルを用意してやれば、既存のJavaScriptライブラリに静的型付けの恩恵を付加することができたり。
(ちなみにjQueryの型注釈ファイルはMSが公式に用意してくれています。)
また、Structual Subtypingという静的型付け+ダックタイピングな機構があるので、
JavaScript的な書き方をそのままに静的型付けの恩恵を受けることができたり。

現在絶賛ドキュメント読み中なのですが、アメリカ語わかんない。
そう言えばドキュメントのライセンスがOWFa 1.0らしいんですが、これはライセンス明記すれば改変OKなんですかね。
もしOKならどなたか翻訳して公開していただいてもいいのよ。