TypeScript入門講座_第1回:私がTypeScriptを学ぶ理由

この記事では、以下の3点が理解できるようになります。

  • JavaScriptとTypeScriptの違い(特に「型」の扱い方)
  • TypeScriptがなぜ生まれ、どんな問題を解決するのか
  • 今、TypeScriptを学ぶべき理由(開発現場での必然性)
目次

JavaScriptの強みと限界

JavaScriptは、ほぼすべてのWebサイトで使われているプログラミング言語です。
書いてすぐ動く手軽さがあり、学びやすく、柔軟です。

ただし、その「柔軟さ」が裏目に出る場面もあります。
たとえば、次のようなコードをご覧ください。

function add(a, b) {
  return a + b;
}

add(1, 2);      // → 3(数値として足し算)
add("1", 2);    // → "12"(文字列として結合)
add({}, true);  // → "[object Object]true"

同じ関数でも、渡す値によってまったく違う動作になります。
これは、JavaScriptが「型(データの種類)」を実行時までチェックしない性質を持っているためです。

このようなしくみは「動的型付け(どうてきかたづけ)」と呼ばれます。
つまり、プログラムが動いて初めて型の間違いに気づくことになります。

TypeScriptは「間違いを事前に止める」ための言語

JavaScriptのような動的型付けでは、エラーが起きるまで間違いに気づけません。
TypeScriptはこの問題を解決するために作られました。

同じ関数をTypeScriptで書くと、次のようになります。

function add(a: number, b: number): number {
  return a + b;
}

add(1, 2);    // OK
add("1", 2);  // エラー:「"1" は文字列(string)なので使えません」

TypeScriptは、関数にどんな型の値を渡すか、そして何が返ってくるのかをあらかじめ明記できます。
そのため、書いた時点で「その使い方は間違っている」と教えてくれます。

このような性質を「静的型付け(せいてきかたづけ)」といいます。

型だけではない、TypeScriptの機能

TypeScriptは、ただ型をつけるだけではありません。
ソフトウェアの設計を明確にし、安心してコードを書ける環境をつくるための言語です。

たとえば、interface(インターフェース)という機能を使えば、データの形を明示できます。

interface User {
  id: number;
  name: string;
  isAdmin?: boolean;
}

function greet(user: User) {
  console.log("こんにちは、" + user.name + "さん");
}

このように、どんなデータを受け取るかを明確に書けるため、他の開発者が見てもすぐに理解できます。
設計図をコードの中に書いているようなものです。

TypeScriptは現代の開発環境の標準

現在、多くのモダンな開発フレームワークやライブラリがTypeScriptを前提に設計されています。

ツール・フレームワークTypeScript対応状況
React(Next.js)TypeScriptがデフォルト構成に含まれる
Vue 3Composition APIが型重視の設計
Angular完全にTypeScriptで書かれている
Deno / BunTypeScriptをそのまま実行できる
Prisma / Viteなどの開発ツールほぼTypeScript前提で開発されている

つまり、JavaScriptだけで開発することは、今や「少数派」になりつつあります。


  • 実行前に間違いを発見できる(静的型チェック)
  • 変数や関数の意図がコードに明示される(設計しやすい)
  • コード補完やエラー表示が強化される(開発効率)
  • 他人のコードも読みやすく、チーム開発に強い(保守性)
  • モダンな開発環境に対応しやすい(将来性)

レガシー対応できる

TypeScriptを使えば「モダンな記法」で書きつつ、最終的にES5互換コードにトランスパイルすることが可能です
わかりやすく言えばモダンなJavaScriptをIEモード(InternetExplor)で動かせるのです。
いわゆるレガシー(時代遅れ)システムにも対応しやすいです。

具体的にできること

TypeScriptで書くコード例(モダン)出力されるJS(ES5互換)
let, constvar に変換される
class Foo {}プロトタイプベースに変換
() => {}(アロー関数)通常の function に変換
import / exportCommonJSやIIFEに変換可能
async/awaitPromise + .then() に変換(ポリフィルが必要な場合あり)

コンパイル設定で調整できる

tsconfig.json の設定でターゲットやモジュール形式を細かく制御できます。

{
  "compilerOptions": {
    "target": "es5",           // 出力コードの互換性をES5に
    "module": "commonjs",      // モジュール形式(他にesnext, amdなど)
    "lib": ["es6", "dom"],     // 必要な機能に応じて調整
    "downlevelIteration": true,// for-of などの構文をES5互換で出力
    "outDir": "./dist",        // 出力先ディレクトリ
    "strict": true             // 型の厳格モード(推奨)
  }
}

注意点(ES5に落とす際の限界)

  1. 一部の機能はポリフィルが必要
    • Promise, Map, Set, Array.prototype.includes など
    • core-jses6-promise を導入する必要あり
  2. コードサイズは増える
    • 特に classasync/await を多用すると、出力JSが膨らむ
  3. パフォーマンスはES6より劣る
    • モダンブラウザ上でネイティブES6を使う方が高速・省メモリ

TypeScriptは「壊れにくく、共有しやすいコード」を書くための言語

JavaScriptは自由で便利ですが、規模が大きくなると壊れやすいという弱点があります。
TypeScriptは、その自由さを保ちつつ、安全に制御する仕組みを提供します。

今後、長く使えるスキルとして学ぶ価値があるのは、TypeScriptの方です。

次回は、TypeScriptのインストール方法について解説します。

Comment

コメントする

目次