| この記事の要点 |
|
概要
TypeScript(タイプスクリプト、TS) は、Microsoft が 2012 年 10 月に公開したプログラミング言語で、JavaScript に 静的型システム を追加した「上位互換言語(superset)」です。設計者は C#、Delphi、Turbo Pascal の生みの親としても知られる Anders Hejlsberg(アンダース・ヘルスバーグ) で、Microsoft でのリーダーシップのもと開発が進められています。プロジェクトは Apache License 2.0 で GitHub に公開され、最も Star の多い言語実装の 1 つです。
TS の最大の特徴は 「JavaScript の構文をそのまま受け入れる」 ことです。.js ファイルの拡張子を .ts に変えるだけで TypeScript として扱え、徐々に型を追加していく 段階的型付け(gradual typing) が可能です。型情報は実行時には存在せず、tsc(TypeScript Compiler)が型チェック後に 型を消去した純粋な JavaScript を出力します。これを type erasure と呼びます。
型推論は非常に強力で、const x = [1, 2, 3]; と書けば number[] が自動で推論されます。さらに ジェネリクス(Array<string>)、ユニオン型(string | number)、インターセクション型(A & B)、条件型(T extends U ? X : Y)、マップ型、テンプレートリテラル型 などの高度な型機能を備え、ライブラリ作者は驚くほど精密な API を表現できます。型システムだけで簡易な計算(SQL パーサや JSON 検証)まで書ける表現力があります。
ファイル種類とビルド成果物
| 拡張子 | 役割 | 備考 |
|---|---|---|
.ts | TypeScript ソース | JSX を含まない通常のロジック |
.tsx | JSX を含む TypeScript | React コンポーネントなど |
.d.ts | 型定義ファイル(宣言ファイル) | JS ライブラリに型を後付けするためのスタブ。DefinitelyTyped / @types/* |
.mts / .cts | ESM / CJS 強制版 | それぞれ .mjs/.cjs へコンパイル |
tsconfig.json | プロジェクト設定 | target, module, strict, paths 等を定義 |
.js + .d.ts | tsc の出力 | 型情報を別ファイルに分離して配布 |
「Hello, World」
// hello.ts — 型注釈付き
function greet(name: string): string {
return `Hello, ${name}!`;
}
// ジェネリクス例
function first<T>(arr: Array<T>): T | undefined {
return arr[0];
}
const users: Array<{ id: number; name: string }> = [
{ id: 1, name: "Alice" },
{ id: 2, name: "Bob" },
];
console.log(greet("World"));
console.log(first<string>(["a", "b"]));
コンパイル: tsc hello.ts → hello.js が生成され、node hello.js で実行できます。ts-node / tsx / Bun を使えば直接実行も可能です。
パッケージ管理・ビルドツール
- npm / yarn / pnpm:基本は JavaScript と同じ。
npm i -D typescriptでローカルインストール - tsc:公式コンパイラ。型チェック+トランスパイル両方
- ts-node / tsx:
.tsを直接実行する開発用ランナー - esbuild / swc:型チェックを行わず高速トランスパイルだけ。バンドラと組み合わせる
- tsconfig パス解決:
baseUrl+pathsでモノレポのエイリアスを定義 - Project References:大規模リポジトリで
tsc --buildによる増分ビルド - 型定義の取得:
npm i -D @types/node @types/react
関連言語との比較
| 項目 | TypeScript | JavaScript | Flow(Meta) | JSDoc 型注釈 |
|---|---|---|---|---|
| 静的型 | 強力 | なし | あり(衰退) | 限定的 |
| コンパイル | 必要 | 不要 | 必要 | 不要 |
| ジェネリクス | 充実 | なし | あり | 限定 |
| エディタ支援 | 最高(VS Code 由来) | 普通 | 普通 | VS Code 経由で良好 |
| 採用状況 | 事実上の標準 | 圧倒的 | 縮小傾向 | 軽量プロジェクト向け |
注意点・落とし穴
anyの罠:anyを使うと型チェックを完全に無効化する。unknown+ 型ガード(typeof、instanceof)で安全に扱う- 型情報は実行時に存在しない:
typeof x === "MyInterface"はできない。実行時バリデーションには zod や valibot を併用 - 構造的型付け(structural typing):名前ではなく形(プロパティ集合)で型を判定する。C# / Java のような名前ベースとは違う
- Type-Only Imports:
import type { Foo } from "./foo";を使うと、トランスパイル後の JS から完全に消える - 列挙型(enum)の地雷:数値 enum はランタイムに残り、双方向マッピングなど混乱を招く。
as constオブジェクト + ユニオン型のほうが推奨 - strict モード:
tsconfig.jsonの"strict": trueは新規プロジェクトでは必須。途中から有効化すると大量のエラーが出る - tsc の出力 と バンドラの設定不整合:
targetとmoduleがランタイムと合っていないと実行時に謎のエラー
関連リンク
- 母言語:JavaScript(.js / .mjs / .cjs)
- 親カテゴリ:プログラミング・スクリプト
- 概論:ファイル拡張子とは
- 外部:typescriptlang.org / tsconfig リファレンス
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15