シンプルな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型を抽出します。これにより、別々の型定義を維持する必要がなくなり、スキーマが唯一の真実の源になります。

ベストプラクティス

  • スキーマ変数名にはcamelCaseSchemaサフィックスを使用します(例:userSchemaproductDetailSchema)。
  • バリデーション制約のメソッドチェーンを追加します:z.string().email()z.number().min(0)z.string().min(1)
  • TypeScript型を手動で書く代わりにz.inferを使用して派生させます。

シンプルなフラットオブジェクトスキーマが基礎です。これを理解すれば、ネストされたオブジェクト、配列、リファインメントへの応用は自然にできるようになります。

ユースケース

REST APIからJSONペイロードを受け取り、コンパイル時の型安全性とランタイムバリデーションの両方で、ビジネスロジックに到達する前に不正なデータを検出したい場合に使用します。

試してみる — JSON to Zod Schema

フルツールを開く