Skip to content

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上で実際に動作します。

JavaScriptの言語仕様は ECMAScript (ES) という名前で標準化されています。

  • 上位互換: TypeScriptはECMAScriptの最新仕様を積極的に取り込んでおり、「最新のJavaScript機能 + 型」という構成になっています。
  • 仕様の追従: 基本的に、JavaScriptに存在する機能はそのままTypeScriptでも使え、ランタイムの挙動はJavaScriptの仕様に従います。

コラム1 TypeScriptの “独自機能” は避けるべき?

Section titled “コラム1 TypeScriptの “独自機能” は避けるべき?”

かつては enumnamespace といったTypeScript独自の実行時機能が追加されたこともありましたが、現在のTypeScriptの方針は「JavaScriptにない独自機能は追加しない」という方向に変わっています。これらは過去の互換性のために残されていますが、現代の開発では積極的な利用を控えるのが一般的です。