2️⃣
[TypeScript UtilityTypes] Partial
TypeScript入門メモ
[Utility Types] Partial について
Partial
公式ドキュメント
Type のすべてのプロパティを optional に設定した型を構築します。このユーティリティは、指定された型のすべてのサブセットを表す型を返します。
interface Todo {
title: string;
description: string;
}
function updateTodo(todo: Todo, fieldsToUpdate: Partial<Todo>) {
return { ...todo, ...fieldsToUpdate };
}
const todo1 = {
title: "organize desk",
description: "clear clutter",
};
const todo2 = updateTodo(todo1, {
description: "throw out trash",
});
使い所
Partial型は、特にオブジェクトの部分的な更新を行う場合に便利。
例えば、ユーザーの情報を更新する関数を考えます。
interface User {
id: number;
name: string;
email: string;
}
function updateUser(id: number, userUpdates: Partial<User>) {
// 更新処理
}
updateUser(1, { name: "New Name" }); // 他のプロパティは省略可能
となるが、ミュータブルな感じになって「ワケワカラン」コード書いてしまいそう、、、
- 関数やメソッドのシグネチャを明確にし、どのような引数が期待されるかを明確にする
- Partial<T>の代わりに、必要なプロパティのみを含む新しい型を定義することを検討
- イミュータブルなパターン(既存のオブジェクトを変更するのではなく、新しいオブジェクトを作成する)を採用する
のは考えても良さそう。
注意点
-
Partial<T>を使用すると、Tのすべてのプロパティが任意になります。したがって、特定のプロパティだけを任意にしたい場合は、別のアプローチを取る必要がある。
-
Partialはオブジェクト型に対してのみ意味があります。プリミティブ型(例:string、number)には適用されない。
-
Partial型は、オブジェクトの型の柔軟性を高めるための強力なツールで、特にAPIのリクエストボディや、部分的なデータ更新の処理など、オプショナルなプロパティが多用される場合に有用。
Discussion