TypeScript Partial<T>ユーティリティ型の解説

Partial<T>が型のすべてのプロパティをオプショナルにする方法を学びます。構文、ユースケース、部分更新や設定オブジェクトの実践的な例を紹介します。

Object Types

詳細な説明

Partialの理解

Partial<T>はTypeScriptで最もよく使われるユーティリティ型の一つです。Tのすべてのプロパティをオプショナルに設定した型を構築し、Tの任意のサブセットを表す型を作成します。

構文

type Partial<T> = {
  [P in keyof T]?: T[P];
};

基本的な例

interface User {
  id: number;
  name: string;
  email: string;
  age: number;
}

type PartialUser = Partial<User>;
// 以下と同等:
// {
//   id?: number;
//   name?: string;
//   email?: string;
//   age?: number;
// }

実践パターン: 更新関数

Partial<T>の最も一般的な使い方は、オブジェクトの一部のフィールドだけを更新するupdate関数やpatch関数です:

function updateUser(id: number, updates: Partial<User>): User {
  const existing = getUserById(id);
  return { ...existing, ...updates };
}

// nameとemailだけを更新 -- 他のフィールドは変更なし
updateUser(1, { name: "Alice", email: "alice@new.com" });

Deep Partial

Partial<T>はシャロー(浅い)です -- トップレベルのプロパティのみオプショナルにします。深くネストされたオブジェクトにはカスタムのDeepPartial型が必要です:

type DeepPartial<T> = {
  [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
};

ユースケース

Partial<T>はupdate/patchエンドポイントの構築、設定のマージ、オブジェクトのプロパティのサブセットを受け取る関数に使用します。すべてのフィールドを要求せずに特定のフィールドを更新するCRUD操作に不可欠です。

試してみる — TypeScript Utility Types

フルツールを開く