TypeScriptとは何か
TypeScriptはMicrosoftが開発した、JavaScriptに静的型付けを加えたプログラミング言語だ。
| 項目 | 内容 |
|---|---|
| 開発元 | Microsoft(Anders Hejlsberg 設計) |
| 初版 | 2012年 |
| 最新版 | TypeScript 5.7(2026年3月時点) |
| 型システム | 構造的部分型(Structural Subtyping) |
| コンパイル先 | JavaScript(ES3〜ESNext) |
| エコシステム | npm 全パッケージと互換 |
TypeScriptは「JavaScriptのスーパーセット」であり、既存のJSコードはそのままTSとしても動作する。型注釈はオプショナルで、段階的に導入できる。
なぜTypeScriptなのか — 数字で見る採用トレンド
| 指標 | 数値 |
|---|---|
| npm週間ダウンロード | 5,200万+(2026年3月) |
| GitHub Stars | 102K+ |
| Stack Overflow人気 | JavaScript, Pythonに次いで3位 |
| State of JS 2025 満足度 | 93% |
| 主要フレームワーク対応 | Next.js, Nuxt, SvelteKit, Astro 全対応 |
企業の採用要件でも「TypeScript経験」はJavaScriptと同等以上に求められている。学ばない理由がない言語と言っていい。
5分で始める — セットアップ
# グローバルインストール
npm install -g typescript
# プロジェクト初期化
mkdir my-project && cd my-project
npm init -y
npx tsc --init
tsconfig.json の推奨設定:
{
"compilerOptions": {
"target": "ES2022",
"module": "NodeNext",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"outDir": "./dist"
}
}
基本の型システム — これだけ覚えれば始められる
| 型 | 例 | 用途 |
|---|---|---|
| string | let name: string = "Taro" | 文字列 |
| number | let age: number = 25 | 数値 |
| boolean | let active: boolean = true | 真偽値 |
| Array | let ids: number[] = [1,2,3] | 配列 |
| object型 | type User = { name: string; age: number } | オブジェクト構造 |
| union | let status: "active" | "inactive" | 複数型のいずれか |
| optional | let bio?: string | あってもなくてもいい |
// 型エイリアスの定義
type Article = {
id: string
title: string
body: string
publishedAt: Date | null
tags: string[]
}
// 関数の型付け
function getArticle(slug: string): Promise<Article | null> {
// ...
}
実践パターン — 現場で使う型テクニック
Generics(ジェネリクス)
type ApiResponse<T> = {
data: T
error: string | null
}
// 使い方
const res: ApiResponse<Article[]> = await fetchArticles()
Utility Types
| 型 | 用途 | 例 |
|---|---|---|
| Partial | 全プロパティをオプショナルに | Partial<User> |
| Required | 全プロパティを必須に | Required<Config> |
| Pick<T, K> | 特定プロパティだけ抽出 | Pick<User, "name" | "email"> |
| Omit<T, K> | 特定プロパティを除外 | Omit<User, "password"> |
| Record<K, V> | キーと値の型を指定 | Record<string, number> |
型ガード
function isArticle(data: unknown): data is Article {
return typeof data === 'object' && data !== null && 'title' in data
}
TypeScript × フレームワーク連携
| フレームワーク | TS対応状況 | 特徴 |
|---|---|---|
| Next.js | ネイティブ対応 | App Router の型推論が強力 |
| React | DefinitelyTyped | FC<Props> でコンポーネント型付け |
| Express | DefinitelyTyped | リクエスト・レスポンスの型付け |
| Prisma | 自動生成 | DBスキーマから型を自動生成 |
| tRPC | End-to-End型安全 | API〜フロントまで型が貫通 |
| Zod | ランタイム検証 | スキーマ定義から型を自動推論 |
よくあるエラーと解決法
| エラー | 原因 | 解決策 |
|---|---|---|
| Type 'X' is not assignable to type 'Y' | 型の不一致 | 型定義の見直し or 型ガードの追加 |
| Object is possibly 'undefined' | null/undefinedの可能性 | オプショナルチェーン(?.)またはnullチェック |
| Property does not exist on type | 未定義プロパティへのアクセス | 型定義にプロパティを追加 or 型アサーション |
| Cannot find module | モジュール解決の失敗 | @types/xxx のインストール or d.ts作成 |
型のある世界で、あなたは何を作るか
TypeScriptは「面倒な型定義を強制するツール」ではない。「未来の自分とチームメンバーへのドキュメント」だ。型があることで、IDEの補完が賢くなり、リファクタリングが安全になり、レビューが効率化する。
JavaScriptを書ける人なら、TypeScriptへの移行は1週間で完了する。その1週間の投資は、あなたのキャリアにどれだけのリターンをもたらすだろうか?
TypeScriptの長期的な価値
TypeScriptは、一度身につけると長く使い続けられる希少な技術だ。
型による安全性、リファクタリングの容易さ、エディタ補完、チーム開発での共通言語。
これらの恩恵は、プロジェクトが大きくなるほど実感しやすくなる。
AIがコードを書く時代でも、型で意図を表現できる言語の価値は、むしろ高まっていく。
AIと型の相性
TypeScriptの型情報は、AIがコードを理解しやすくするための入力としても機能する。
AIがより正確なコードを生成できる環境を整えるために、型で意図を残す姿勢は長期的に効いてくる。
学び始めのつまずきを減らす
TypeScriptを学び始める人の多くは、型エラーとの向き合い方に最初の壁を感じる。
エラーを敵として避けるのではなく、ヒントとして読む姿勢を最初から身につけると、学びの速度が大きく変わる。
型は自分の思考を守るためのレールだと捉えると、日々のコーディングがぐっと楽になる。
導入5ステップ
ステップ1: Node.js環境の準備とTSプロジェクト初期化
Node.js 20以上をインストール後、npm init -y と npm install -D typescript @types/node を実行する。npx tsc --init で tsconfig.json を生成し、strictモードを有効化して始める。
ステップ2: 基本型の習得
string、number、boolean、配列、オブジェクト、any、unknown の違いを手を動かして確認する。型注釈を明示的に書くパターンと、型推論に任せるパターンの使い分けを体感する。
ステップ3: Union型・リテラル型・判別可能Union
API レスポンスや状態管理でよく使うUnion型を書く。type Status = 'idle' | 'loading' | 'success' | 'error' のようなリテラル型と、kind フィールドでの判別可能Unionを実装する。
ステップ4: GenericsとUtility Types
Pick、Omit、Partial、Record などのUtility Typesと、自前のGenerics関数を書く。fetch のラッパー関数を型安全に実装する演習が実務感覚を掴む近道になる。
ステップ5: フレームワーク連携と既存JSの段階移行
Next.jsやExpressでの型付き開発を経験し、既存JSプロジェクトは .js を .ts にリネームして any から少しずつ厳格化する戦略を取る。allowJs: true で移行コストを下げられる。
よくある質問(FAQ)
Q. どのエディタが最適?
VS CodeかCursorが圧倒的に強い。TypeScriptは開発元がMicrosoftで、VS Code系エディタとの統合が最高クラスです。
Q. type vs interface はどう使い分ける?
オブジェクト形状の定義はinterface、ユニオン型や複雑な型合成が必要ならtypeが推奨。プロジェクトで統一ルールを決めておくのが長期保守に効きます。
Q. 厳格設定は必要?
strict: true を最初から有効化するのが鉄則。途中で有効化すると膨大なエラーが発生し、修正コストが跳ね上がります。
