TypeScript-first schema validation with static type inference

Zod란?

Zod는 TypeScript 우선 스키마 선언 및 유효성 검사 라이브러리입니다.

zod는 타입스크립트가 아닌 자바스크립트로 스키마(schema)를 정의하고 이것을 이용하여 유효성 검증을 가능하게 해줍니다.(스키마란, 쉽게 말해서 데이터의 형태와 구조를 뜻)

기본 사용법

간단한 문자열 스키마 만들기

import { z } from "zod";

// creating a schema for strings
const mySchema = z.string();

// ✅ parsing
mySchema.parse("tuna"); // => "tuna"
mySchema.parse(12); // => throws ZodError

// ✅ "safe" parsing (검증이 실패해도 오류가 발생하지 않습니다.)
mySchema.safeParse("tuna"); // => { success: true; data: "tuna" }
mySchema.safeParse(12); // => { success: false; error: ZodError }

객체 스키마 생성


// ✅ 스키마 정의
const Account = z.object({
  id: z.string().uuid(),
  email: z.string().email(),
  age: z.number().int().min(18).max(80),
  level: z.enum(["GOLD", "SILVER", "BRONZE"]),
  image: z.string().url().max(200).optional(),
  ips: z.string().ip().array().optional(),
  active: z.boolean().default(false),
  createdAt: z.date().default(new Date()),
});

// ✅ 스키마로 부터 타입 추론
type Account = z.infer<typeof Account>;

function updateAccount(account: Account) {
  // ✅ 스키마로 유효성 검증
  Account.parse(account);

}

parse와 safeParse의 차이

const validatedFields2 = OperatorEmailVerifications.createV1.inputParams.parse({
    pEmail: formData.get('pEmail'),
    pSiteType: Number(formData.get('pSiteType')),
    pEmailVerificationType: Number(formData.get('pEmailVerificationType')),
    pIp: session?.user.operator_ip,
    pCallDate: spCallDate(),
  });

  const validatedFields = OperatorEmailVerifications.createV1.inputParams.safeParse({
    pEmail: formData.get('pEmail'),
    pSiteType: Number(formData.get('pSiteType')),
    pEmailVerificationType: Number(formData.get('pEmailVerificationType')),
    pIp: session?.user.operator_ip,
    pCallDate: spCallDate(),
  });

  console.log('validatedFields2', validatedFields2);
  console.log('validatedFields', validatedFields);

Untitled

.parse

.parse(data: unknown): T

Zod 스키마가 주어지면 해당 .parse메서드를 호출하여 data가 유효한지 확인할 수 있습니다 . 그렇다면 전체 유형 정보와 함께 값이 반환됩니다! 그렇지 않으면 오류가 발생합니다.

중요: 에서 반환된 값은 전달한 변수의 전체 복제.parse 입니다 .

const stringSchema = z.string();
stringSchema.parse("fish"); // => returns "fish"
stringSchema.parse(12); // throws error