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では型を操作するという違いがある。