TypeScriptとは・なぜ採用すべきか
TypeScriptはJavaScriptに静的型付けを追加した言語です。2026年現在、大規模Webアプリ開発のデファクトスタンダードとなっており、React・Next.js・Node.js・FastAPIフロントエンドなど、ほぼすべての主要プロジェクトで採用されています。
型システムの基礎
// 基本的な型定義
type UserId = string;
type Salary = number;
interface Engineer {
id: UserId;
name: string;
skills: string[];
salary?: Salary;
readonly createdAt: Date;
}
// Union型・Literal型
type Level = "junior" | "middle" | "senior";
type HttpMethod = "GET" | "POST" | "PUT" | "DELETE";
// Generic型
type ApiResponse = {
data: T;
status: number;
message: string;
timestamp: Date;
};
// Utility Types活用
type CreateEngineer = Omit;
type UpdateEngineer = Partial>;
高度な型パターン
// Discriminated Union
type Result =
| { success: true; data: T }
| { success: false; error: E };
// 使用例
function fetchEngineer(id: string): Result {
try {
const engineer = db.find(id);
if (!engineer) {
return { success: false, error: new Error("Not found") };
}
return { success: true, data: engineer };
} catch (e) {
return { success: false, error: e as Error };
}
}
const result = fetchEngineer("123");
if (result.success) {
console.log(result.data.name); // 型安全にアクセス
} else {
console.error(result.error.message);
}
React + TypeScript実践パターン
import { useState, useCallback, type FC } from "react";
interface EngineerCardProps {
engineer: Engineer;
onSalaryUpdate?: (id: string, salary: number) => void;
variant?: "compact" | "detailed";
}
const EngineerCard: FC = ({
engineer,
onSalaryUpdate,
variant = "compact"
}) => {
const [isEditing, setIsEditing] = useState(false);
const handleSalaryUpdate = useCallback((newSalary: number) => {
onSalaryUpdate?.(engineer.id, newSalary);
setIsEditing(false);
}, [engineer.id, onSalaryUpdate]);
return (
{engineer.name}
Skills: {engineer.skills.join(", ")}
{variant === "detailed" && (
Salary: {engineer.salary?.toLocaleString()}円/月
)}
);
};
まとめ
TypeScriptは現代のフロントエンド・バックエンド開発において不可欠な技術です。型安全性によりバグを早期発見し、IDEの補完を活かした生産性向上が期待できます。React・Node.js・Next.jsとの組み合わせで、堅牢なフルスタック開発が実現します。