シンプルなJSONオブジェクトをZodスキーマに変換する
フラットなJSONオブジェクトをz.string()、z.number()、z.boolean()、z.null()バリデーターを使ったZodバリデーションスキーマに変換する方法を学びます。
Basic Types
詳細な説明
JSONからZodスキーマへ
最も一般的な変換は、シンプルでフラットなJSONオブジェクトをZodのz.object()スキーマに変換することです。JSONの各キーがフィールドになり、値の型がZodバリデーターを決定します。
JSON例
{
"id": 42,
"name": "Alice",
"email": "alice@example.com",
"isActive": true,
"score": 98.5
}
生成されるZodスキーマ
import { z } from "zod";
const userSchema = z.object({
id: z.number().int(),
name: z.string(),
email: z.string(),
isActive: z.boolean(),
score: z.number(),
});
type User = z.infer<typeof userSchema>;
マッピングの仕組み
Zodは各JSONプリミティブに対応するバリデーターを提供します:
| JSON型 | Zodバリデーター |
|---|---|
| string | z.string() |
| integer | z.number().int() |
| float | z.number() |
| boolean | z.boolean() |
| null | z.null() |
コンパイル時にのみ存在するTypeScriptインターフェースとは異なり、Zodスキーマはランタイムでデータを検証します。これにより、単一の定義から型安全性とランタイム保証の両方が得られます。
z.inferのテクニック
z.infer<typeof schema>ユーティリティはZodスキーマからTypeScript型を抽出します。これにより、別々の型定義を維持する必要がなくなり、スキーマが唯一の真実の源になります。
ベストプラクティス
- スキーマ変数名にはcamelCaseに
Schemaサフィックスを使用します(例:userSchema、productDetailSchema)。 - バリデーション制約のメソッドチェーンを追加します:
z.string().email()、z.number().min(0)、z.string().min(1)。 - TypeScript型を手動で書く代わりに
z.inferを使用して派生させます。
シンプルなフラットオブジェクトスキーマが基礎です。これを理解すれば、ネストされたオブジェクト、配列、リファインメントへの応用は自然にできるようになります。
ユースケース
REST APIからJSONペイロードを受け取り、コンパイル時の型安全性とランタイムバリデーションの両方で、ビジネスロジックに到達する前に不正なデータを検出したい場合に使用します。