KibelaのフロントエンドをES2015からTypeScriptに絶賛移行中です。
で、なぜ flow じゃないくてTSなのかって話です。
flow vs typescriptである理由は、どちらもJSのスーパーセットをうたう静的型付きのaltJSだからです。この時代にあえてaltJSを導入する理由としては静的型があるというのが必須で、かつ学習コストを考えるとJSのスーパーセットであるのが望ましいでしょう。
言語仕様
言語仕様の点から言うと、決定的な差はないと思っています。
メリットもだいたい同じで
- 生産性: エディタの補完をJSよりも賢くできるので、より少ない脳のワーキングメモリでコードを書ける
- 堅牢性: コンパイル時に(=多くのケースではエディタで)typoなどの間違いを検出できるのでバグを減らせる
- 学習コスト: JSをベースにしており、実行もほぼJSなのでほぼモジュールシステムと型システムだけを学べばよい
検索しやすさ・コミュニケーションのしやすさ
検索しやすさは圧倒的にTypeScriptです。
flowは検索しにくいのはもちろんのこと、その名前の元になったと思われるflow analysis との混同が激しく、flowやTypeScriptの文脈で口頭で「flow解析が云々」といってもだいたいflowのことだと勘違いされて通じません。
ファイルタイプに対する誠実さ
flowの拡張子は .js
、TypeScriptの拡張子は .ts
です。
拡張子でファイルタイプを判断することの多いこの世界線においては、flowがJavaScriptと同じ拡張子で互換性のない言語として書かせるのは、ファイルタイプに対する誠実さに欠けているのではないかと思っています。
もちろんマーケティング的に「flowは言語ではない。flowはJavaScriptである」と主張することは、心理的な敷居を下げるという意味では一定の効果があるかもしれません。しかし、その辺にあるコードをJSだと思って眺めているとコードハイライトエンジンやエディタが構文エラーを指摘してくる、というのは気持ちのいい体験ではありません。
開発言語
flowはOCamlです。
TypeScriptはTypeScriptです(つまりセルフホスティング)。
TypeScript処理系をJS(あるいはTS)からライブラリとして使用できるというのは大きなメリットです。
まとめ
以上です。言語としては決定的な差はないものの、それをとりまく環境はTypeScriptのほうが好ましいと考えています。ゆえに私はTypeScriptを推します。