TypeScript → Zod 스키마
TypeScript 인터페이스와 타입 별칭을 Zod 유효성 검사 스키마로 즉시 변환. 유니언, 선택적 필드, 배열, 열거형, 중첩 객체, 타입 참조 지원. 무료, 100% 클라이언트사이드.
사용 방법
- TypeScript
interface또는type선언을 왼쪽 패널에 붙여넣습니다. - 입력이 멈추면 300ms 후 자동으로 유효성 검사 및 변환이 실행됩니다.
- Zod 스키마 생성 버튼을 클릭해 강제로 변환할 수 있습니다.
- 복사 버튼을 클릭해 Zod 출력을 클립보드에 복사합니다.
- 결과를 프로젝트에 붙여넣으세요. 출력에는 이미
import문과export type타입 추론 줄이 포함되어 있습니다.
지원하는 TypeScript 기능
- 기본 타입:
string,number,boolean,null,undefined,any,unknown,void,never,bigint,symbol - 선택적 속성:
prop?: type→.optional() - 유니언 타입:
A | B→z.union([A, B]) - 문자열 열거형:
“a” | “b” | “c”→z.enum([“a”, “b”, “c”]) - 배열:
T[]/Array<T>→z.array(T) - 중첩 객체: 인라인 객체 타입 →
z.object({}) - 상호 참조: 선언된 타입 간의 참조 → Schema 상수
- readonly:
readonly수식어를 허용하며, 변환 시 무시(Zod 스키마는 기본적으로 불변) - 유틸리티 타입:
Partial<T>,Record<K, V>,Promise<T> - 교차 타입:
A & B→z.intersection(A, B) - 튜플:
[A, B]→z.tuple([A, B]) - 리터럴 타입:
“value”,42,true→z.literal()
예시
다음 TypeScript를 입력하면:
interface Address {
street: string;
city: string;
zipCode?: string;
}
export interface User {
id: number;
name: string;
role: "admin" | "user" | "guest";
age?: number;
isActive: boolean;
tags: string[];
address: Address;
}
export type Status = "active" | "inactive" | "pending";
다음과 같이 생성됩니다:
import { z } from "zod";
export const AddressSchema = z.object({
street: z.string(),
city: z.string(),
zipCode: z.string().optional(),
});
export type Address = z.infer<typeof AddressSchema>;
export const UserSchema = z.object({
id: z.number(),
name: z.string(),
role: z.enum(["admin", "user", "guest"]),
age: z.number().optional(),
isActive: z.boolean(),
tags: z.array(z.string()),
address: AddressSchema,
});
export type User = z.infer<typeof UserSchema>;
export const StatusSchema = z.enum(["active", "inactive", "pending"]);
export type Status = z.infer<typeof StatusSchema>; FAQ
어떤 TypeScript 구문을 지원하나요?
interface와 type alias 선언을 지원하며, 기본 타입(string, number, boolean, null, undefined, any, unknown), 선택적 속성(?), 유니언 타입(A | B), 문자열 열거형(리터럴 유니언), 배열(T[], Array<T>), 인라인 중첩 객체, 선언된 타입 간의 상호 참조, Partial<T>·Record<K, V>·Array<T>·Promise<T> 등의 유틸리티 타입을 지원합니다.
타입 간의 상호 참조는 어떻게 처리되나요?
입력에 여러 interface 또는 type alias가 선언된 경우, 선언된 타입 이름에 대한 참조는 해당 Schema 상수로 변환됩니다. 예를 들어 Address 타입의 필드는 출력에서 AddressSchema가 됩니다. 입력에서 선언되지 않은 타입은 z.unknown()(주석 포함)이 됩니다.
생성된 스키마는 어떤 Zod 버전과 호환되나요?
생성된 스키마는 Zod v3와 Zod v4 모두와 호환됩니다. 출력은 z.object(), z.string(), z.union(), z.enum(), z.array(), z.optional(), z.literal(), z.record(), z.infer<> 등 표준 API를 사용합니다.
문자열 유니언 타입은 어떻게 변환되나요?
문자열 리터럴의 유니언(예: "admin" | "user" | "guest")은 간결하게 z.enum(["admin", "user", "guest"])로 자동 변환됩니다. 혼합 유니언(예: string | null)은 z.union([z.string(), z.null()])을 사용합니다.
TypeScript class나 제네릭 타입 정의를 변환할 수 있나요?
class와 제네릭 타입은 지원 범위 밖입니다. 이 도구는 interface와 type alias 변환에 특화되어 있습니다. 구체적인 타입에 적용된 유틸리티 타입(Array<string>, Record<string, number>)은 지원됩니다.
코드가 서버로 전송되나요?
아닙니다. TypeScript 파서와 Zod 코드 생성기는 모두 브라우저에서 실행됩니다. 소스 코드는 사용자 기기를 벗어나지 않습니다.