TypeScript基礎|ユーティリティ型(Utility Types)ざっくりまとめ
TypeScript基礎のユーティリティ型のざっくりまとめ。
5/26/2025
ユーティリティ型(Utility Types)
既存の型を元にして 新しい型を簡単に作るための便利な仕組み のこと。
たとえば「全てのプロパティを任意(オプショナル)にした型が欲しい」といったときに、自分で一つ一つ書き直さずに、ユーティリティ型を使えば一発で定義できるようになる。
📄 Required<T>
目的: すべてのプロパティを「必須」に変える。
type User = { name?: string; age?: number };
type AllRequired = Required<User>;
// → { name: string; age: number } ?のオプショナルな型が消えて、「必須」になる。Required<T> を使うことで、if 文などで「あるかどうか?」のチェックをしなくてよくなるのが大きな利点。
📄 Readonly<T>
目的: すべてのプロパティを「読み取り専用(変更不可)」にする。
type User = { name: string };
const user: Readonly<User> = { name: "Ari" };
user.name = "Taro"; // → ×エラー:読み取り専用📄 Partial<T>
目的: すべてのプロパティを「オプショナル」にする。
type User = { name: string; age: number };
type PartialUser = Partial<User>;
// → { name?: string; age?: number }📄 Record<Keys, Type>
目的: 指定したキーと型からオブジェクトを作る。
type Roles = "admin" | "user";
type RoleConfig = Record<Roles, boolean>;
// → { admin: boolean; user: boolean }📄 Pick<T, Keys>
目的: 特定のプロパティ「だけ」を抜き出した型を作る。
type User = { id: number; name: string; age: number };
type Picked = Pick<User, "id" | "name">;
// → { id: number; name: string }📄 Omit<T, Keys>
目的: 特定のプロパティを「除いた」型を作る。
type User = { name: string; age: number };
type PartialUser = Omit<User, "age">;
// → { id: number; name: string }
📄 Exclude<T, U>
目的: ユニオン型Tから、Uに一致する型を「除く」。
type Role = "admin" | "user" | "guest";
type Limited = Exclude<Role, "guest">;
// → "admin" | "user"📄 Extract<T, U>
目的: ユニオン型Tから、Uに一致する型「だけ」を取り出す。
type Role = "admin" | "user" | "guest";
type OnlyGuest = Extract<Role, "guest">;
// → "guest"📄 NoInfer<T>
目的: ジェネリック型で「型推論を防ぐ」ためのテクニック。
function useValue<T, U extends T>(value: T, defaultValue: NoInfer<U>) {
return value !== undefined ? value : defaultValue;
}使い所がやや特殊で、「型推論でUが勝手にTに引っ張られないようにする」用途。
📄 NonNullable<T>
目的: null と undefined を除いた型を作る。
type Name = string | null | undefined;
type SafeName = NonNullable<Name>;
// → string🔧 TypeScriptのユーティリティ型は、「型に対して使えるメソッドのようなもの」
例:JavaScriptで値を操作するとき
const user = { name: "Ari", age: 30 };
const { name } = user; // nameだけ取り出す例:TypeScriptでは同じように、型に対してこういう操作ができる
type User = { name: string; age: number };
type Picked = Pick<User, "name">; // 型からnameだけを取り出すJavaScriptでは値を操作し、
TypeScriptでは型を操作するという違いがある。