2️⃣

[TypeScript UtilityTypes] Partial

2024/01/02に公開

TypeScript入門メモ
[Utility Types] Partial について

Partial

公式ドキュメント
https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype

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