Partial<T> Partial(Required を含む)

最終更新:2026-10-22

Partial<T> Partial(Required を含む)

Partial<T> は T のすべてのプロパティをオプショナルにします。典型的な場面は「部分更新」(フォームの下書き、patch 系の API)で、「2つのフィールドだけ変える」ために新しい型を手書きする必要がなくなります。Required<T> とは互いに鏡像の関係です。

グループユーティリティ型
種類型
strict モード不要

ℹ️ 説明 エディタは TypeScript を JavaScript にトランスパイルして実行します(型チェックなし)。型チェック結果は各サンプルの出力を参照してください。

📝 構文

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

// 使い方
function applyPatch(user: UserProfile, patch: Partial<UserProfile>): UserProfile;

⚙️ パラメータ

T変換されるオブジェクト型です。各プロパティ K とその型 T[K] がマップ型によって順にたどられます

戻り値:新しい型です。プロパティの集合は T と同じですが、すべてに ? のオプショナル印が付きます。

▶ サンプル

下のコードを編集して「試す」を押すと、トランスパイル実行結果を確認できます:

出力:

{"id":1,"name":"Diana","email":"d@example.com","age":22}

(トランスパイル後の実行出力。patch は age だけを渡し、他のフィールドは元の値を保ちます)

💡 ポイント

ℹ️ 説明 実装の仕組みはマップ型です。[K in keyof T]?: T[K] と書き、T のすべてのキーを順にたどって ? を付けます(レッスン19「ツール型の実装原理」に完全な導出があります)。
⚠️ 注意 Partial は第一層にしか効きません。ネストしたオブジェクトのプロパティの型は再帰的にはオプショナルになりません。「深いオプショナル」が必要なら自分で DeepPartial(再帰マップ型)を書きましょう。
💡 ヒント Partial と Required は鏡像の関係です(? を付けるか外すか)。Pick/Omit と組み合わせれば「特定のフィールドだけ変更を許す」精密な patch 型が作れます。
ケースは今後追加予定です。

📚 関連チュートリアル

❓ よくある質問

Q Partial と手で ? をたくさん書くのは何が違いますか?
A 効果は同じですが、Partial は元の型に自動で追従します。UserProfile にフィールドを追加すれば、Partial<UserProfile> も自動的にその新フィールドのオプショナル版を持ちます。手書き版は取り残されます。
Q ネストしたプロパティもオプショナルになりますか?
A なりません。Partial は浅い変換で、第一層のプロパティにだけ ? が付きます。address: {city: string} は全体がオプショナルになりますが、その中の city は必須のままです。深い要件には DeepPartial を自作しましょう。
Q Partial の後に必須フィールドへ undefined を代入できますか?
A フィールドの省略は常にできますが、明示的に undefined を代入できるかは strictNullChecks に依存します。厳格モードでは Partial のプロパティ型は T[K] | undefined です。厳格モードを常に有効にすることをおすすめします。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%