Zod 4.1がCodecs APIを導入、双方向データ変換をサポート
Zod 4.1が新しいz.codec() APIを導入した。従来の.transform()が一方向のみだったのに対し、双方向変換を可能にし、型安全性と柔軟性を向上させた。
基本的な使用例:
typescript
const stringToDate = z.codec(
z.string(), // 入力スキーマ:ISO文字列
z.date(), // 出力スキーマ:Dateオブジェクト
{
decode: str => new Date(str), // 文字列 → Date
encode: date => date.toISOString(), // Date → 文字列
}
);
// 双方向変換
stringToDate.decode("2024-01-15T10:30:00.000Z"); // Dateオブジェクト
stringToDate.encode(new Date()); // "2024-01-15T10:30:00.000Z"Codecsの特徴:
- 双方向変換:
decode(入力→出力)とencode(出力→入力)の両方を定義可能 - 型安全性:
.decode()は厳密な型チェックを行い、.parse()よりも安全 - 非同期対応:変換関数をasync/awaitで記述可能
- 組み合わせ自由:他のZodスキーマと自由に組み合わせ可能
公式が次のようなコピー&ペーストで利用可能な標準的なコーデック実装をいくつか提供している。
typescript
const stringToBigInt = z.codec(z.string(), z.bigint(), {
decode: str => BigInt(str),
encode: bigint => bigint.toString(),
});
const jsonCodec = z.codec(z.string(), z.json(), {
decode: jsonString => JSON.parse(jsonString),
encode: value => JSON.stringify(value),
});