🎃

型定義を一括オプショナルにする方法

2024/06/14に公開

自己紹介

おはこんばんにちは。まだ駆け出しエンジニアの柿です。
普段はフロントエンド領域を生業としていて、
個人でなにかやるときには React/Next、仕事では Vue/Nuxt を使用しています。

はじめに

今回は業務で TypeScript を使っていて、
「へー!こんなことできるんだ!」と思ったことをシェアしたいと思います。

型定義を一括オプショナルにする方法

TypeScript では、オブジェクトの型定義を一括でオプショナルにすることができます。
例えば、次のような型があったとします。

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

この型をもとに、すべてのプロパティがオプショナルである型が必要な場合、以下のように書くことができます。

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

しかし、既に存在する型定義に対してすべてのプロパティをオプショナルにするには、TypeScript のユーティリティ型を使うと便利です。

Partial

TypeScript には Partial というユーティリティ型が用意されており、これを使うと簡単に型定義を一括でオプショナルにできます。
例えば、先ほどの User 型を一括でオプショナルにするには、次のように Partial を使います。

type PartialUser = Partial<User>;

この PartialUser 型は、以下のように解釈されます。

type PartialUser = {
  name?: string;
  age?: number;
  email?: string;
};

つまり

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

と同義です。
元の User 型のすべてのプロパティがオプショナルとなります。

実際の使用例

部分的なデータの更新や、オプショナルな設定オブジェクトなど、様々な場面で Partial 型が役立ちます。

例えば、ユーザー情報の一部だけを更新する関数を定義する場合、次のように Partial を使うと便利です

function updateUser(id: string, updates: Partial<User>) {
  // なんらかの更新処理
}

この updateUser 関数は、User 型のすべてのプロパティがオプショナルな updates オブジェクトを受け取ります。
これにより、ユーザー情報の一部だけを更新することができると思います。

まとめ

TypeScript の Partial ユーティリティ型を使うことで、既存の型定義を簡単に一括オプショナルにすることができます。
これにより、コードの再利用性が高まり、開発効率が向上します。業務で TypeScript を使う際には、ぜひこの便利な機能を活用してみてください。

この他にも、TypeScript には様々なユーティリティ型が存在し、型定義を柔軟に操作するためのツールが揃っています。
今後もこれらの機能を活用して、より良いコードを堅牢に書いていきましょう!!

GitHubで編集を提案

Discussion