TypeScript-first schema validation with static type inference
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);
}
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);
.parse
.parse(data: unknown): T
Zod 스키마가 주어지면 해당 .parse
메서드를 호출하여 data
가 유효한지 확인할 수 있습니다 . 그렇다면 전체 유형 정보와 함께 값이 반환됩니다! 그렇지 않으면 오류가 발생합니다.
중요: 에서 반환된 값은 전달한 변수의 전체 복제.parse 입니다 .
const stringSchema = z.string();
stringSchema.parse("fish"); // => returns "fish"
stringSchema.parse(12); // throws error