zod
라이브러리가 필요한 이유는 TypeScript
의 한계 때문이다.
TypeScript
는 컴파일 시점에서의 타입에러만 잡아낼 수 있고 런타임 단계에서의 타입 에러는 어쩔 수가 없다. 왜냐면 런타임 단계에서 작동되는 것은 JavaScript
이기 때문이다.
컴파일
런타임
TypeScript는 number 타입만 입력받도록 강제하는 것은 가능하다. 하지만 원하는 문자열이나 원하는 숫자 범위를 강제하거나 number타입의 정수/실수 구분은 불가능하다.
이러한 TypeScript의 한계 때문에 zod라이브러리를 사용한다.
스키마란 데이터의 형태 및 구조라고 할 수 있다. 한 남성의 신상 정보에 대해 zod를 통해 스키마를 정의해 보겠다.
import { z } from "zod";
const Man = z.object({
name: z.string(),
height: z.number(),
age: z.number(),
phoneNum: z.string(),
homePhoneNum: z.string().optional(),
isCompletedMilitaryService: z.boolean(),
});
이렇게 zod를 통해 나에대한 정보를 객체 형식으로 나타내보았다.
zod 문법에 대해 배운적이 없더라도 바로 이해할 수 있을 정도로 직관적이다.