Zod | 조들지말자

Lumpen·2024년 11월 25일
0

Typescript

목록 보기
23/23

Zod

TypeScript-first 스키마 선언 및 검증 라이브러리

주요 기능

  • 스키마 선언: 간단한 문자열부터 복잡한 객체까지 다양한 스키마를 선언
  • 타입 추론: TypeScript를 통해 스키마를 선언하면 자동으로 정적 타입을 추론
  • 유효성 검증: 선언한 스키마에 맞지 않는 데이터를 검증하고 오류를 처리

Zod는 빠르고 간단하게 스키마를 선언하고 검증하는 데 중점을 두고 있으며, TypeScript와 JavaScript 모두에서 사용할 수 있다

import { z } from "zod";

// 스키마 정의 
const UserSchema = z.object({
  userId: z.string(),
  name: z.string(),
  email: z.string().nullable(),
  countryCode: z.string().optional(),
  dateCreate: z.string().optional(),
  dateUpdate: z.string().optional(),
});

// 정의된 스키마로 타입 추론
export type User = z.infer<typeof UserSchema>;

const user = { userId: 'test', name:'test', email: 'email' }
const user2 = { userId: 'test' }

// 정의된 스키마로 유효성 검증
UserSchema.parse(user);  // 통과 - success 반환
UserSchema.parse(user2);  // 실패 - error throw
UserSchema.safeParse(user2); // 실패 - 오류 객체 반환


const validation = UserSchema.safeParse(user);
// 성공 시 sucess 객체를 반
  if (!validation.success) {
    return NextResponse.json(validation.error.errors, { status: 404 });
  }

유효성 검증

parse() 와 safeParse() 를 통해 유효성 검사를 할 수 있다

parse

검증 실패 시 오 메시지와 함께 error throw

safeParse

검증 실패 시 결과 객체에 오류 메시지 및 여러 정보를 전달

import { z } from "zod";

const UserScheme = z.object({
  email: z.string(),
  image: z.string(),
});

const user = {email:'', image: ''}

UserSchema.safeParse(user) // 성공

위와 같은 형식으로 검증 가능하지만
아무 문자열이나 들어와도 검증에 성공하게 된다

import { z } from "zod";

const UserScheme = z.object({
  email: z.string().email(),
  image: z.string().url(),
});

const user = {email:'', image: ''}

UserSchema.parse(user) //실패

.email() 등의 검증자를 사용하여 검증 포맷을 추가할 수 있다

검증에 실패하면 아래와 같이 validation error 가 발생한다

ZodError: [
  {
    "validation": "email",
    "code": "invalid_string",
    "message": "Invalid email",
    "path": [
      "email"
    ]
  },
  {
    "validation": "url",
    "code": "invalid_string",
    "message": "Invalid url",
    "path": [
      "image"
    ]
  },
]
profile
떠돌이 생활을 하는. 실업자, 부랑 생활을 하는

0개의 댓글