型の国のTypeScript
本書について
あなたが読んでいるこの文章はC87で頒布されたTypeScript in Definitelylandの全文です。内容は(筆者のやる気次第で)随時更新されていく可能性があります。誤字や内容の誤り、深く掘り下げてほしい内容などがある場合、Issue*1として報告していただけますと幸いです。
Webサイトとして閲覧したい場合はhttp://typescript.ninja/typescript-in-definitelyland/を参照してください。PDF, epubとして入手したい場合はhttps://tcb.mowa-net.jp/griflet/github/typescript-ninja/typescript-in-definitelyland/を参照してください。
無料配布版では、表紙データなどは含まれないため可愛い表紙の冊子が欲しい場合はぜひ紙版をお買い上げください。C87冊子版の表紙はイラスト:Jecyさん(http://jecy.main.jp/)、デザイン:shatiさん(http://utata-ne.net/)です。この表紙のおかげで書名が決まりました。可愛い表紙を本当にありがとうございます!
本書は、ECMAScript 5レベルのJavaScriptの言語仕様と、JavaScriptによるOOPのいろはを理解している人を対象にしています。また、解説するTypeScriptの内容には執筆時点(1.3.0)ではまだ未リリースの構文についての解説も含みます。
本書のすべてのサンプルコードは公式にリリースされている最新のTypeScriptコンパイラか、TypeScriptリポジトリの次に示したコミットハッシュの時点でのLKG (Last Known Good)のコンパイラを使ってコンパイルの確認をしています。
現時点で最新のTypeScriptコンパイラは次のとおり。
Version 1.3.0.0
現時点でTypeScriptリポジトリのmaster/HEADは次のとおり。
5237ed7bed24695178a3386e4a9399e3614ed650
本書の内容
第1章「戦闘準備だ!TypeScript!」では、TypeScriptコンパイラのセットアップ方法と、WebStormの設定について言及します。Visual StudioやNuGetの扱いについては言及しませんのでご了承ください。
第2章「TypeScriptの基本」では、TypeScriptの基本構文を簡単に解説し、このあとの章を読み解くための基礎知識を蓄えます。
第3章「型は便利だ楽しいな」では、TypeScriptによる開発を行う上で理解しておきたい型についての知識を蓄えます。
第4章「アドバンスド型戦略」では、TypeScriptで利用可能な型のちょっと難しいところ、利用頻度は低いが知っておくと嬉しいことについて解説します。
第5章「JS資産と型定義ファイル」では、既存のJS用資産を活かすための型定義ファイルについての解説とその書き方と、ついでにDefinitelyTypedへのコントリビュートの仕方について解説します。
JavaScriptの(TypeScriptではなく)仕様まで踏み込んだ解説については、拙著TypeScriptリファレンス(Amazon*2、達人出版会*3)を参照してください。
TypeScriptリファレンスはTypeScript 1.0.0対応の書籍です。しかし、TypeScriptの基本的な部分は変わっていないため、今でも役に立ちます。
なぜTypeScriptを選ぶべきなのか
TypeScriptはMicrosoftが主導となって開発している言語で、ECMAScript(JavaScript)に静的な型付けによる検証を導入したものです。現実を見据えた言語仕様で、"未来のJavaScriptそのもの"になることを目指しているようです。
実際に、TypeScriptはECMAScriptのsuper set(上位互換)であることを標榜しています。つまり、ECMAScript+静的型付け=TypeScriptです。そして、"TypeScript独自の実装として表れる仕様"を注意深く避けてきています。
他のaltJS、たとえばCoffeeScriptやDartは、JavaScriptとは全く違う独自の記法で記述します。これは記述はしやすいですが、変換結果のJavaScriptは見づらく、人間に優しい出力とはいえません。つまりこれらは独自路線に行くことで、JavaScriptの辛さを軽減しようとしています。
一方、TypeScriptは先に述べたようにJavaScriptを踏襲します。mozaic.fm出張版 #8*4でもあんどうやすしさんと一緒に考えましたが、そこでの結論も「JSの完全な置換えを目指すDartは夢、TypeScriptは現実」というものでした。
この方針ではECMAScriptのクソな仕様の数々は(勝手に闇に葬るわけにはいかないので)残ってしまいます。ですが、その代わりにTypeScriptは将来"正式な"JavaScriptになる可能性があります。稀に、TypeScriptのリポジトリに「TypeScriptにLINQを導入してほしい」という要望が上がってくることがありますが、上記の事情を鑑みればそのような要望が取り込まれないのは明らかです。LINQや拡張メソッドは確かに便利ですし、作者がC#と同じアンダース・ヘルスバーグ氏なのでそういう期待が湧くのは理解できます。しかし、将来のECMAScriptに入るとは現時点では考えにくいでしょう。
さて、「TypeScriptが将来のJavaScriptそのものになる?妄想乙」と思われた読者諸兄もおられるでしょう。あながちそれが誇大妄想ではないのではないか?という証跡が最近出てきています。
GoogleからAngularJS 2.0のために開発する新言語AtScriptと、Facebookからも新言語Flowが公表されました。これら2つの言語は、両方ともTypeScriptの上位互換または互換性を考慮して設計されるそうです。MicrosoftとGoogle, Facebookの3巨人がTypeScriptに賭けると言っているのです。将来的にTypeScriptが時代の本流になる、という考えを妄想と切って捨てることはできないでしょう*5。
というわけで、Dartが完全にJSを置き換える可能性はありますが、今のところ私はTypeScriptに賭けていこうと思います。
[*5] 詳しくはhttp://qiita.com/vvakame/items/bf4d1e339d5815026fbbにまとめました