0Pricing
TypeScript Academy · レッスン

データモデルの再利用可能なパターン

Paginated 、Result 、Pick/Omit/Partialを使ったDTO、idをキーにしたマップなど、実際のモデルにジェネリックパターンを適用します

「データモデルの再利用可能なパターン」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン3/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全3レッスンが含まれています。

導入

目標:よく使うデータの形をジェネリック型としてまとめ、型安全性を失わずに構造を再利用できるようにします。

  • Paginated<T>
  • Result<T,E>
  • Pick/Omit/Partialを使ったDTO
  • idをキーとするマップ

Paginated<T>

Paginated<T>はメタデータを一元化し、リストの項目型Tを正確に保ちます。

type Paginated<T> = {
  items: T[];
  total: number;
  page: number;
  pageSize: number;
};

type User = { id: number; name: string };

const page1: Paginated<User> = {
  items: [{ id: 1, name: "Ada" }],
  total: 10,
  page: 1,
  pageSize: 5,
};

console.log(page1.items[0].name);

Result<T,E>

Result<T,E>は、判別子(ok)を使って成功と失敗を明示的にモデル化し、安全な分岐を可能にします。

type Ok<T> = { ok: true; data: T };
type Err<E = string> = { ok: false; error: E };

type Result<T, E = string> = Ok<T> | Err<E>;

function readUser(id: number): Result<{ id: number; name: string }> {
  return id > 0 ? { ok: true, data: { id, name: "Ada" } } : { ok: false, error: "not found" };
}

const r = readUser(1);
if (r.ok) {
  console.log(r.data.name);
} else {
  console.error(r.error);
}

DTOパターン

Pick/Omit/Partialを使うと、コアモデルから簡潔なDTO型を導出でき、重複を避けられます。

type User = { id: number; name: string; email?: string; role: "user" | "admin" };

type UserCreateDto = Pick<User, "name" | "email">; // fields required to create

// Update = partial editable fields
type UserUpdateDto = Partial<Pick<User, "name" | "email">>;

const createBody: UserCreateDto = { name: "Ada", email: "a@x.io" };
const updateBody: UserUpdateDto = { name: "Ada L." };

MapById<T>

MapById<T>はエンティティをidでインデックス化し、高速な検索を可能にします。idが存在することを保証するため、Tに制約を付けてください。

type Key = string | number;

type MapById<T extends { id: Key }> = Record<Key, T>;

const byId: MapById<{ id: number; name: string }> = {
  1: { id: 1, name: "Ada" },
  2: { id: 2, name: "Lin" },
};

console.log(byId[1].name);

ヒント

ヒント:

  • パターンは小さく保ち、組み合わせて使えるようにしてください。
  • 状態機械には判別可能なユニオンを優先してください。
  • モデルからDTOを導出し、手動でコピーするのは避けてください。

Paginated<T>の確認

クイックチェック:ジェネリックなPaginated<T>を定義するのはなぜですか?

まとめ

まとめ:繰り返し登場する形を一般化します。Paginated<T>、Result<T,E>、Pick/Omit/Partialを使ったDTO、idでインデックス化したマップなどです。小さなヘルパーは複数の機能にわたって活用できます。

よくある質問

「データモデルの再利用可能なパターン」レッスンは無料ですか?

はい。「データモデルの再利用可能なパターン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全3レッスンが含まれています。

「データモデルの再利用可能なパターン」で何を学びますか?

Paginated 、Result 、Pick/Omit/Partialを使ったDTO、idをキーにしたマップなど、実際のモデルにジェネリックパターンを適用します ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/3です。

「データモデルの再利用可能なパターン」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ジェネリックinterfaceとtype alias
  2. Conditional Types(入門)とunionへの分配
  3. データモデルの再利用可能なパターン
← TypeScript Academyに戻る