TypeScript vs JavaScript 比較
TypeScript と JavaScript はフロントエンド開発において最も重要な2つの言語であり、それらの違いを理解することはモダン Web 開発にとって極めて重要です。
JavaScript は Web のネイティブスクリプト言語であり、TypeScript は JavaScript のスーパーセットで、型システムやその他の高度な機能が追加されています。

核心的な違い
| 特徴 | JavaScript | TypeScript |
|---|---|---|
| 型システム | 動的型付け | 静的型付け(オプション) |
| コンパイル | インタプリタ実行 | JavaScript にコンパイル |
| 開発時の型チェック | 无 | 有 |
| IDE サポート | 基本 | 強力なスマートヒント |
| コードリファクタリング | 困難 | 安全かつ簡単 |
型システムの比較
JavaScript は動的型付け言語であり、変数の型は実行時に決定されます:
JavaScript 動的型付け
// JavaScript - 変数の型はいつでも変更可能
var message = "Hello";
message = 123; // 有効、エラーは発生しない
message = true; // こちらも有効
// 実行前は変数の型が不明
function greet(name) {
return "Hello, " + name;
}
var message = "Hello";
message = 123; // 有効、エラーは発生しない
message = true; // こちらも有効
// 実行前は変数の型が不明
function greet(name) {
return "Hello, " + name;
}
TypeScript は静的型付け言語であり、コンパイル時に型をチェックします:
TypeScript 静的型付け
// TypeScript - 宣言時に型を指定
var message: string = "Hello";
// message = 123; // コンパイルエラー: Type 'number' is not assignable to type 'string'
// 関数の引数と戻り値の型が明確
function greet(name: string): string {
return "Hello, " + name;
}
// 型エラーはコンパイル時に発見される
greet(123); // コンパイルエラー: Argument of type 'number' is not assignable to parameter of type 'string'
var message: string = "Hello";
// message = 123; // コンパイルエラー: Type 'number' is not assignable to type 'string'
// 関数の引数と戻り値の型が明確
function greet(name: string): string {
return "Hello, " + name;
}
// 型エラーはコンパイル時に発見される
greet(123); // コンパイルエラー: Argument of type 'number' is not assignable to parameter of type 'string'
コンパイルプロセス
TypeScript はブラウザで実行するために JavaScript へコンパイルする必要があります:
TypeScript ソースコード
// app.ts - TypeScript ソースコード
interface User {
name: string;
age: number;
}
function createUser(name: string, age: number): User {
return { name, age };
}
var user = createUser("Alice", 25);
console.log(user);
interface User {
name: string;
age: number;
}
function createUser(name: string, age: number): User {
return { name, age };
}
var user = createUser("Alice", 25);
console.log(user);
コンパイル後の JavaScript:
コンパイル後の JavaScript
// app.js - コンパイル後の JavaScript
function createUser(name, age) {
return { name: name, age: age };
}
var user = createUser("Alice", 25);
console.log(user);
function createUser(name, age) {
return { name: name, age: age };
}
var user = createUser("Alice", 25);
console.log(user);
型推論
TypeScript には強力な型推論機能があり、明示的に型を宣言しなくても:
型推論
// TypeScript が自動的に型を推論
var num = 10; // number と推論される
var str = "hello"; // string と推論される
var isActive = true; // boolean と推論される
// 関数の戻り値の型も推論される
function add(a, b) {
return a + b; // 戻り値は number と推論される
}
var result = add(1, 2); // result の型は number
var num = 10; // number と推論される
var str = "hello"; // string と推論される
var isActive = true; // boolean と推論される
// 関数の戻り値の型も推論される
function add(a, b) {
return a + b; // 戻り値は number と推論される
}
var result = add(1, 2); // result の型は number
開発体験の比較
スマートヒント
TypeScript は IDE に豊富な型情報を提供し、スマートヒントを実現します:
// 在 TypeScript 中,IDE 知道 user 对象有 name 和 age 属性 user. // 自动提示 .name 和 .age // JavaScript 中 IDE 无法确定类型,提示有限 user. // 可能没有有用的提示
リファクタリングのサポート
TypeScript によりコードのリファクタリングがより安全になります:
- 変数・関数の名前を変更すると、すべての参照が自動的に更新されます
- 関数シグネチャを変更すると、呼び出し元にエラーが表示されます
- コードを抽出するとき、型は自動的に維持されます
TypeScript を選ぶ理由
なぜ TypeScript を選ぶのか:
- コンパイル時のエラー検出で、バグを早期に発見
- コードの可読性と保守性の向上
- 強力な IDE スマートヒント
- 安全なリファクタリング
- モダンフロントエンドフレームワークの標準装備(React、Vue、Angular)
TypeScript は JavaScript のスーパーセットであり、JavaScript の柔軟性を保ちつつ、型システムを追加してコード品質を向上させます。大規模プロジェクトでは、TypeScript の利点がより顕著になります。
その他の拡張