1.2 TypeScript と JavaScript との関係
TypeScriptとJavaScriptは非常に密接な関係にありますが、その役割を理解するには TypeScriptコンパイラ(tsc) の2つの仕事を整理することが重要です。
1.2.1 TypeScript コンパイラの役割 (1) 型チェック
Section titled “1.2.1 TypeScript コンパイラの役割 (1) 型チェック”型チェックは、プログラムを実行することなく、文面のみから矛盾を見つけ出す作業です。
- 静的チェック: 実際にプログラムを動かす「テスト」とは異なり、コードを解析するだけでエラーを検出します。
- 型情報に基づくエラー: 例えば、数値が必要な関数に文字列が渡されている場合、コンパイラがそれを検知してコンパイルエラーを発生させます。
- ランタイムへの影響: TypeScriptの型情報はあくまでチェックのために存在し、実行時の挙動(ランタイムの挙動)には一切影響を与えません。
1.2.2 TypeScript コンパイラの役割 (2) トランスパイル
Section titled “1.2.2 TypeScript コンパイラの役割 (2) トランスパイル”コンパイラのもう1つの役割は、TypeScriptのソースコードをJavaScriptのコードに変換することです。この変換を「トランスパイル」と呼びます。
- 型情報の除去: トランスパイル後のJavaScriptコードからは、TypeScript特有の型注釈などはすべて取り除かれます。
- 構文の変換: 新しいJavaScriptの構文(ES2015のクラス構文など)を、古い実行環境でも動く形式に変換することも可能です。
- 成果物: 最終的に出力されたJavaScriptファイルのみが、ブラウザやNode.js上で実際に動作します。
1.2.3 TypeScript と ECMAScript の関係
Section titled “1.2.3 TypeScript と ECMAScript の関係”JavaScriptの言語仕様は ECMAScript (ES) という名前で標準化されています。
- 上位互換: TypeScriptはECMAScriptの最新仕様を積極的に取り込んでおり、「最新のJavaScript機能 + 型」という構成になっています。
- 仕様の追従: 基本的に、JavaScriptに存在する機能はそのままTypeScriptでも使え、ランタイムの挙動はJavaScriptの仕様に従います。
コラム1 TypeScriptの “独自機能” は避けるべき?
Section titled “コラム1 TypeScriptの “独自機能” は避けるべき?”かつては enum や namespace といったTypeScript独自の実行時機能が追加されたこともありましたが、現在のTypeScriptの方針は「JavaScriptにない独自機能は追加しない」という方向に変わっています。これらは過去の互換性のために残されていますが、現代の開発では積極的な利用を控えるのが一般的です。