🍘
Zodの基本的な使い方
今回はZodの基本的な使い方について紹介したいと思います。
はじめに
Zodとは、TypeScript向けのスキーマ宣言とデータ検証のためのライブラリです。Zodを使用すると、型安全な方法でデータ構造を定義し、それに基づいてデータを検証できます。Zodは、TypeScriptの型システムと統合されており、コンパイル時に型エラーを検出しやすくし、ランタイムエラーを減らすのに役立ちます。簡潔に言えば、Zodは型とデータの整合性を強化するためのツールです。
基本的な使い方
インストール
Zodは以下の方法でインストールできます。
npm install zod # npm
yarn add zod # yarn
bun add zod # bun
pnpm add zod # pnpm
文字列スキーマ
単純な文字列スキーマを作成し、.parse()という関数を使用して文字列であるかどうかを検証できます。エラーの場合は、ZodErrorをスローします。
import { z } from 'zod'
// 文字列のスキーマの作成
const stringScheme = z.string()
stringScheme.parse("hoge")
// => "hoge"
stringScheme.parse(12)
// => throws ZodError
検証が失敗したときにZodエラーをスローしたくない場合は、.safeParse()を使用できます。
import { z } from 'zod'
const stringScheme = z.string()
stringScheme.safeParse(12);
// => { success: false; error: ZodError }
stringSchema.safeParse("hoge");
// => { success: true; data: 'hoge' }
文字列スキーマを作成する際に、エラーメッセージをカスタマイズすることもできます。
import { z } from 'zod'
const nameScheme = z.string({
required_error: "Name is required",
invalid_type_error: "Name must be a string",
})
文字列以外にも、Number型やBoolean型などのスキーマを作成できます。また、Number型やBoolean型などのスキーマもカスタマイズしてエラーメッセージを設定することも可能です。
import { z } from 'zod'
// Number型
const numberScheme = z.number()
// Boolean型
const booleanScheme = z.boolean()
オブジェクト
z.objectを使用してオブジェクトスキーマを定義できます。
import { z } from 'zod'
const userSchema = z.object({
name: z.string(),
age: z.number(),
tel: z.string(),
})
userSchema.parse({ name: 'hoge', age: 66, tel: 'xxx-xxxx-xxxx' })
スキーマから型を抽出
z.infer<typeof Schema>を使用して、任意のスキーマから TypeScript型を抽出できます。
const userSchema = z.object({
name: z.string(),
age: z.number(),
tel: z.string(),
})
type user = z.infer<typeof userSchema>
// type user = {
// name: string;
// age: number;
// tel: string;
// }
オプショナルな値
.optional()、.nullable()、.nullish()関数を使用してオプショナルな値のスキーマを作成できます。
const optionalString = z.string().optional()
// string | undefined
const nullableString = z.string().nullable()
// string | null
const nullishString = z.string().nullish()
// string | null | undefined
さいごに
以上で、Zodの基本的な使い方について紹介しました。Zodについての理解が深まりましたら幸いです。
参考サイト
Discussion