実はつい最近になって TypeScript を使ってみました、そして TypeScript の良さがわかりました。
JavaScriptの問題点
私は長らく Lisp や Ruby のような動的型付けプログラミング言語(変数等に型を指定しないプログラミング言語)を使ってきたので、 同じく動的型付け言語の JavaScript も特に困らず、なぜ JavaScript に型宣言が要るんだろう? と思っていました。
しかし、研修で JavaScriptを教えていると Java, C# を使って来た受講者達は、演習でちょっとした間違いに気づかずつまずいています。
その原因には、JavaScriptの寛容過ぎる言語仕様だと思います。
未定義の参照が実行しないと判らない、関数の引数が間違っていてもエラーにならない、違う型のデータを演算しでも適宜変換され実行される・・・
TypeScriptとは
TypeScriptはマイクロソフトが開発したオープンソースの言語、言語処理系です。
その開発には Turbo Pascal, Delphi, C# など言語や処理系の開発で有名な Anders Hejlsberg も関わっているそうです。
TypeScriptはJavaScriptにES6で導入された機能と、型宣言を追加した言語です。またその処理系は、TypeScriptを入力しJavaScriptに変換します。
型宣言により得られた情報を基に処理系内で、式や代入、関数呼び出し等でデータの型がチャックされ矛盾があればエラーになります。最終的には型情報は捨てられたJavaScriptに変換されますが、プログラムの間違いがかなりチェックされます。
TypeScriptの一番良い点は導入コストが低いこと
さらに、TypeScriptの良い点は導入コストが低いことです。言語としては JavaScriptに型宣言を追加し type
, interface
など型関連の文が追加された程度で Java や C# を使って来たプログラマーには学習すべきことは JavaScript(ES6) とほぼ同じです。
処理系の導入も babelを導入しているような環境なら難しくありませんし、良く使われているエディター Visual Studio Code
もプラグインを入れると IDE のようにエディター上でエラーを指摘してくれます。
さらに素晴らしいのは any
型です、とりあえず変数等の型は any
にすれば型エラーは消えます。導入初期に大量の工数を使ってコードを変更する必要がありません。
そして、any
型を徐々に本来の型に書き換えて行けば、TypeScriptの型チェックが働くようになり、ちょとしたコーディングミスが実行前に検出できるようになります。
また、フレームワークやライブラリーなど自分たちが作ったコードでない部分は any
のままでも全く問題ありません。
また型の一部である関数の引数の数や未定義エラー等も JavaScript + ESLint より厳密にチェックされます。
このように導入コストが低いにも関わらず、高度なエラーチェックが手に入れらてるのが TypeScript の大きなメリットだと思います。