Tips

開発Tips(2025-12-05)

型安全なコードを維持しながら、柔軟な型定義を実現するために、TypeScriptのUtility Typesを活用しましょう。既存の型を元に新しい型を生成することで、コードの再利用性と可読性を高めます。

TypeScript

型安全なコードを維持しながら、柔軟な型定義を実現するために、TypeScriptのUtility Typesを活用しましょう。既存の型を元に新しい型を生成することで、コードの再利用性と可読性を高めます。

Utility TypesでAPIレスポンスの型定義を効率化する

TypeScriptのUtility Typesを活用することで、APIレスポンスの型定義をより効率的に、かつ型安全に行うことができます。特にPickOmitPartialReadonlyなどを組み合わせることで、既存の型から必要なプロパティだけを抽出したり、特定のプロパティを除外したり、必須プロパティを任意にしたり、読み取り専用にしたりといった操作が容易になります。

例えば、APIから取得するユーザー情報の型Userがあったとして、その一部のプロパティだけを表示するコンポーネントがあるとします。

interface User {
  id: number;
  name: string;
  email: string;
  phone: string;
  address: string;
}

// User型からidとnameだけを抽出した型
type UserSummary = Pick<User, 'id' | 'name'>;

function displayUserSummary(user: UserSummary) {
  console.log(`ID: ${user.id}, Name: ${user.name}`);
}

説明:

上記の例では、Pick<User, 'id' | 'name'>を使って、User型からidnameプロパティだけを抽出したUserSummary型を定義しています。これにより、コンポーネント内でemailphoneといった不要なプロパティに誤ってアクセスすることを防ぎ、型安全性を向上させることができます。

注意点:

  • Utility TypesはTypeScriptのコンパイル時に処理されるため、実行時のパフォーマンスに影響はありません。
  • PickOmitなどのUtility Typesは、元の型を変更するわけではありません。新しい型を生成する点に注意してください。
  • 複雑な型定義になる場合は、型エイリアス(type MyType = ...)を活用して可読性を高めることをおすすめします。

おすすめポイント:

Utility Typesを積極的に活用することで、コードの重複を減らし、型定義の保守性を高めることができます。APIレスポンスだけでなく、フォームの入力値の型定義や、Reduxなどの状態管理ライブラリでの型定義など、様々な場面で役立ちます。