データモデルの再利用可能なパターン
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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ジェネリックinterfaceとtype alias
- Conditional Types(入門)とunionへの分配
- データモデルの再利用可能なパターン