はじめに
Web開発の現場で必ずといっていいほど登場する JavaScript (JS) と TypeScript (TS)。
最近では、エンジニア面接で「JSとTSの違いを説明してください」と聞かれることも増えてきました。
本記事では、技術的な観点から両者の違いを整理し、面接でも実務でも役立つ知識としてまとめます。
JavaScript とは?
JavaScript は 1995 年に登場したスクリプト言語で、現在は ECMAScript という国際標準に基づいています。
-
動的型付け言語
→ 変数に型を指定せず、実行時に型が決まる。 -
ブラウザや Node.js で直接実行可能
-
柔軟性が高い反面、実行時まで型エラーに気づきにくい。
例:
let value = "123";
value = 123; // 実行可能だが、意図しない動作の原因に
TypeScript とは?
TypeScript は 2012 年に Microsoft が開発した JavaScript のスーパーセットです。
JavaScript に 静的型付けやクラスベースの構文を追加し、より堅牢な開発を可能にします。
-
静的型付け
→ 実行前に型エラーを検出できる。 -
最終的には JavaScript にトランスパイルして実行
-
大規模開発や長期運用に強い
例:
let value: string = "123";
value = 123; // コンパイルエラー
両者のコード比較
同じ関数を JS と TS で比較すると違いが分かりやすいです。
//JavaScript
function add(a, b) {
return a + b;
}
console.log(add(10, 20)); // 30
console.log(add("10", 20)); // "1020"(文字列連結になる)
//TypeScript
function add(a: number, b: number): number {
return a + b;
}
console.log(add(10, 20)); // 30
console.log(add("10", 20)); // コンパイルエラー
→ TypeScript は 意図しない挙動を事前に防げるのが大きな利点です。
JavaScript と TypeScript の関係性
-
スーパーセット関係
JavaScript ⊆ TypeScript
→ JS のコードはすべて TS として有効。 -
実行環境
TS はそのまま実行できず、必ず JS に変換して動く。
従来は TypeScript を必ず JavaScript にトランスパイルしてから実行する必要がありましたが、最近では Node.js v22.18.0 以降や新しいランタイム環境で、TypeScriptをそのまま実行できるようになっています。 -
標準仕様の違い
JS = 国際標準(ECMAScript)
TS = Microsoft 独自拡張
→ 理論的には TS は JS に従属しますが、実務では同格の選択肢として扱われています。
メリットとデメリット
言語 | メリット | デメリット |
---|---|---|
JS | 柔軟で学習コストが低い 直接実行可能 型がなく、実行時エラーが多い |
大規模に不向き |
TS | 型安全でバグを事前防止 補完・リファクタリングが強力 大規模開発向き |
学習コストが高い |
実務での使い分け
小規模・検証・スピード重視 → JavaScript
大規模・長期運用・チーム開発 → TypeScript
特に近年の現場では「新規開発は TS で進める」が一般的になっています。
面接での答え方のヒント
単に「型がある/ない」だけでなく、次のように実務的な視点を加えると説得力が増します。
「JavaScriptは動的型付けで柔軟に書けますが、実行時にしかエラーに気づけません。一方、TypeScriptは静的型付けによりコンパイル時にエラーを検出でき、リファクタリングもしやすいため大規模開発に向いています。TypeScriptはJavaScriptにコンパイルされて実行されるため、実行環境としてはJavaScriptに依存しています」
まとめ
JavaScript: 柔軟で手軽に書ける標準言語
TypeScript: 型安全性と保守性を高めたスーパーセット
関係性: TS は JS の上位互換。実行は JS に依存する。
実務では: 小規模なら JS、大規模なら TS が一般的
面接で問われるのは単なる違いの暗記ではなく、「なぜその違いが実務で重要なのか」 を語れるかどうか。そこまで答えられれば評価されやすいです。
更新履歴
- 2025/09/30 コメントにてご指摘いただき、Node.js v22.18.0 以降や新しいランタイムでTypeScriptをそのまま実行できる件について追記しました