Partial / Required / Readonly / Pick / Omit など組み込みの型変換
// ── よく使うユーティリティ型まとめ ──────────────────────
type User = { id: number; name: string; age: number; email: string };
// Partial<T>: 全プロパティをオプション(?)にする
type UpdateUser = Partial<User>;
// { id?: number; name?: string; age?: number; email?: string }
// ← 更新時に変更したいプロパティだけ渡せる
// Required<T>: 全プロパティを必須にする(Partial の逆)
type MustHaveAll = Required<Partial<User>>; // = User
// Readonly<T>: 全プロパティを読み取り専用にする
type ImmutableUser = Readonly<User>;
// const u: ImmutableUser = {...}; u.name = '...'; // ❌ エラー
// Pick<T, K>: 指定したプロパティだけ選ぶ
type UserPreview = Pick<User, 'id' | 'name'>;
// { id: number; name: string }
// Omit<T, K>: 指定したプロパティを除く
type UserWithoutEmail = Omit<User, 'email'>;
// { id: number; name: string; age: number }
// Record<K, V>: キーと値の型を指定したオブジェクト型
type RolePermissions = Record<'admin' | 'user' | 'guest', string[]>;既存の型を再利用して変形することでDRYに型定義が書ける。Pick/OmitはAPI境界でよく使われる。