TypeScriptは、JavaScriptに静的型システムを付け加えたプログラミング言語です。
JavaScriptはWebブラウザの中でとどまらず、サーバーサイド開発に拡大しています。
大規模になってきたJavaScriptのシステムを支えるため、開発を効率化するTypeScriptは広く用いられ始めています。
本記事では、TypeScriptの特徴やメリットなどを解説します。
TypeScriptとは
TypeScriptは、MicroSoftによって開発されたプログラミング言語です。
TypeScriptの応用範囲は幅広く、JavaScriptを用いる新規プロジェクトではTypeScriptが使われるというのが当たり前の光景になりつつあります。
TypeScriptの特徴
TypeScriptはJavaScriptに類似していますが、JavaScriptと異なる点としていくつかの特徴を持ちます。
以下の内容がTypeScriptの特徴になります。
- 静的型システムを備えている
- JavaScriptに対する静的型付け
- 高い表現力を持つ型システム
上記の内容をそれぞれ解説します。
静的型システムを備えている
改めて、JavaScriptと異なる点として静的型システムを備えていることが特徴の一つになります。
TypeScriptにはコンパイラ(tsc)があり、これによってTypeScriptに対する型チェックを実施することが可能になります。
また、型に関連するプログラムの誤りに対してコンパイルエラーを検出できます。
JavaScriptに対する静的型付け
TypeScriptは”JavaScript + 静的型付け”といった様相の言語です。
そのため、TypeScriptの静的型付け以外の部分は、JavaScriptそのものです。
逆に、JavaScriptといった既存言語に静的型付けの要素を足したものがTypeScriptと言えます。
特に、以下の”型”が特徴的です。
- 型注釈
- 型推論
例えば、型注釈は「変数が型を持っている」といった静的型システムの特徴を最も直接的に表す構文と言えます。
また、型推論の機能も充実しており、型注釈がなくても型を決めてくれる機能が同時に存在します。
高い表現力を持つ型システム
静的型付けを備えたプログラミング言語は多々ありますが、その中でもTypeScriptの型システムは類を見ない高い表現力を持っています。
高い表現力とは、端的に言えば”型”で様々なロジックを表せることを指します。
- プリミティブ型
- オブジェクト型
- 関数型
- リテラル型
- ユニオン型
- keyof型
TypeScriptの独特な設計パターンはこれらの型の存在が大きく、TypeScriptの「高い表現力」の源になります。
静的型付け言語と動的型付け言語の違い
静的型付け言語と動的型付け言語には、決定的な違いがあります。
各型付け言語は、以下の特徴があります。
- 静的型付け言語は、コンパイル時に「型」が決定する
- 動的型付け言語は、実行時に「型」が決定する
ここでは、静的型付け言語をTypeScript、動的型付け言語をPythonを例に挙げて解説します。
静的型付け言語|コンパイル時に「型」が決定
改めて静的型付け言語は、コンパイル時に「型」が決定される言語です。
型を明示的に宣言する必要があり、型の不一致はコンパイルエラーとして検出されます。
// TypeScriptでは、変数の型を明示的に指定します。
let message: string = "Hello, World!";
let count: number = 42;
// 型が一致しないとコンパイルエラーになります。
// 次の行はエラーを引き起こします。
// message = 123; // エラー: Type 'number' is not assignable to type 'string'.
TypeScript(静的型付け言語)の場合、変数message
とcount
の型をそれぞれstring
とnumber
として宣言しています。
型の不一致があると、例えばmessage = 123;
のように異なる型の値を代入しようとするとコンパイルエラーが発生します。
これにより、プログラムの型安全性が保証されます。
動的型付け言語|実行時に「型」が決定
一方で、動的型付け言語は実行時に「型」が決定される言語です。
型を明示的に宣言する必要はなく、型の不一致が原因で実行時にエラーが発生する可能性があります。
# Pythonでは、変数の型を明示的に指定する必要はありません。
message = "Hello, World!"
count = 42
# 型が異なる値を代入してもエラーになりません。
message = 123 # Pythonでは問題ありません。
Python(動的型付け言語)の場合、変数message
とcount
の型を明示的に指定する必要はなく、好きな値を代入できます。
変数message
に最初に文字列を代入し、その後に整数を代入してもエラーは発生しません。
これは柔軟ですが、実行時に型に関するエラーが発生するリスクがあります。
これらの違いから、静的型付け言語は型に関するエラーをコンパイル時に発見しやすく、安全性が高いです。
一方で、動的型付け言語は柔軟性が高く、コードの記述量が少なくて済むという特徴があります。
TypeScriptとJavaScriptの違い
上述してきた内容からTypeScriptとJavaScriptをまとめると以下になります。
TypeScript | JavaScript | |
---|---|---|
型定義 | 型指定する(静的型付け) | 型指定しない(動的型付け) |
コンパイル | コンパイルが必要 | コンパイルが不必要 |
エラーチェック | コンパイル時 | 実行時 |
ライブラリ | JavaScriptのライブラリ使用 | JavaScriptのライブラリ使用 |
フレームワーク | JavaScriptのフレームワーク使用 | JavaScriptのフレームワーク使用 |
TypeScriptとJavaScriptの主な違いは、型定義の有無、コンパイルの有無、エラーチェックのタイミングになります。
JavaScriptは型指定やコンパイル等がないため、コード記述といった開発コストが幾分か減りますが、プログラムの品質が低下する恐れがあります。
一方で、TypeScriptはコンパイルが必要になりますが、変数や関数の振る舞いを正確に制御しエラーも事前チェックできます。
そのため、エラーチェックやテスト多い大規模プロジェクトにも対応しやすいメリットが挙げられます。
TypeScriptとJavaScriptの記述形式の違い
TypeScriptにおいて、一般的な基本文法に対しては型定義を明示的に実施することになります。
- 変数における型
- オブジェクトにおける型
- 関数における型
- クラスにおける型
代表的な文法に対して型定義を行う方法を理解すれば、TypeScriptによる型の有効性も理解できます。
実際に、TypeScriptとJavaScriptの記述方法の違いを詳しく知りたい人は「【TypeScript VS JavaScript】コードの比較による言語の違いを解説!」を一読ください。
TypeScriptのメリット
やはり、TypeScriptのメリットとして静的型付けが欠かせません。
また、以下の項目が詳細なメリットになります。
- 静的型付けのメリット – 型安全性
- 静的型付けのメリット – ドキュメント化
それぞれのメリットについて解説します。
静的型付けのメリット – 型安全性
型安全性とは、間違ったプログラムをコンパイラが型チェックにより検出してくれる仕組みを指します。
TypeScriptプログラムをコンパイルすると、コンパイルエラーが発生します。
コンパイルエラーは主に、構文が正しくない構文エラーと型チェックが失敗した型エラーの2種類です。
特に、コンパイラによって型エラーが検出されるのが静的型付けの恩恵になります。
静的型付けのメリット – ドキュメント化
静的型付けのもう一つのメリットは、ドキュメント化です。
静的型付けがある言語は、型の情報がソースコードに書かれることになります。
型だけで関数等の全容が把握できるわけではありませんが、適切な関数名やコメントを組み合わせることでプログラムの読解時に中身を全て読む必要がなくなります。
とくに、大規模なプログラムにおいて複数人開発がほとんどであり、他者のプログラムを読む機会が増えてしまいます。
その際に、型による補助の効果は絶大になります。
TypeScriptのデメリット
本来は、JavaScriptと比較した際にコンパイルの役割を持つか持たないかが差異になります。
そのため、静的型システムを持つ言語に精通していない人は強いて言えば以下の項目がデメリットになる、あるいは感じてしまいます。
- TypeScriptのデメリット – コンパイルエラー
- TypeScriptのデメリット – 独自機能の利用
それぞれのデメリットを解説します。
TypeScriptのデメリット – コンパイルエラー
コンパイルの役割も持つ言語をあまり利用されない人は、コンパイルエラーの手間が厄介だと感じるかもしれません。
しかし、実際はコンパイルエラーは開発において頼もしい機能であり、ミスが発見しやすい、バグが少なくなる利点があります。
つまり、開発における成果物のクオリティが高まるわけです。
一長一短ではありますが、大規模開発の中で正しく動作する、ソースコードの可読性等を考慮するとデメリットはメリットにもなります。
TypeScriptのデメリット – 独自機能の利用
TypeScriptは、JavaScriptには存在しない独自機能がいくつか存在します。
具体的なもので言えば、enumやnamespaceになります。
開発当初はJavaScriptにない機能を追加していましたが、現在TypeScriptの方針として独自機能を追加しないことになっています。
また、筆者自身も独自機能を使うべきではないと考えます。
独自機能を使わない理由として、独自機能であるがゆえにコード記述の統一性や作成した機能が複雑になる欠点があります。
つまり、JavaScriptの構文に比べて複雑な挙動をする傾向になってしまいます。
そのため、実際は利便性のために独自機能が追加されていますが、複雑な挙動を持つプログラムの理解のしにくさにつながるため、筆者は積極的な利用はお勧めしません。
開発領域におけるTypeScriptの強み
開発領域としてフロントエンド・バックエンド両方でTypeScriptを導入・採用すると、多くのメリットが享受できます。
つまり、開発プロジェクト内で使用する言語が1つであることはメリットになります。
開発言語が1つであれば、以下の利点が生まれます。
- モジュール共有
- 開発プロジェクト内のノウハウ共有
- 学習コストパフォーマンス最大化
想像が容易いかと思いますが、開発領域を超えてTypeScriptで統一できれば、開発に利用するモジュールあるいはノウハウが領域間で共有できます。
また、言語2つ以上になれば学習コストが大幅に膨らみます。
そのため、統一言語としてTypeScriptを利用できれば、学習コストが減りパフォーマンスを最大化できます。
TypeScriptの良いところは?
JavaScriptに対してコンパイルし利用する言語を「AltJS」と呼び、TypeScriptもその一種になります。
多くのAltJSの中でもTypeScriptは、最も人気な言語の一つです。(ランキングトップクラス)
実際に、「Stack Overflow」や「The State of JavaScript」など様々なアンケート調査・サイトで人気度の高さを誇っています。
他にも以下のポイントで人気を博しています。
- ネット上における圧倒的な情報量
- エコシステムの充実度
- TypeScriptによる就職採用率
さらに詳しくTypeScriptの人気を知りたい人は、「【TypeScript】難しい理由と解決策を徹底解説!」を一読ください。
コメント