TypeScript → Zod スキーマ

TypeScriptのinterfaceとtype宣言をZodバリデーションスキーマに即座に変換。Union型・省略可能フィールド・配列・enum・ネストオブジェクト・型参照に対応。無料、完全ブラウザ完結。

100% クライアントサイド データはブラウザ外に出ません 無料 · 登録不要
TypeScript 入力
Zod スキーマ出力

使い方

  1. TypeScriptのinterfaceまたはtype宣言を左のパネルに貼り付けます。
  2. 入力停止から300ms後に自動でバリデーションと変換が行われます。
  3. Zodスキーマを生成ボタンで強制変換できます。
  4. コピーボタンでZod出力をクリップボードにコピーします。
  5. 結果をプロジェクトに貼り付けます。出力にはimport文とexport typeの型推論行がすでに含まれています。

対応TypeScript機能

  • 基本型stringnumberbooleannullundefinedanyunknownvoidneverbigintsymbol
  • 省略可能プロパティprop?: type.optional()
  • Union型A | Bz.union([A, B])
  • 文字列enum“a” | “b” | “c”z.enum([“a”, “b”, “c”])
  • 配列T[] / Array<T>z.array(T)
  • ネストオブジェクト:インラインオブジェクト型 → z.object({})
  • 相互参照:宣言済み型間の参照 → Schemaの定数
  • readonlyreadonly修飾子を受け入れ、変換時に無視(ZodスキーマはデフォルトでImmutable)
  • ユーティリティ型Partial<T>Record<K, V>Promise<T>
  • 交差型A & Bz.intersection(A, B)
  • タプル[A, B]z.tuple([A, B])
  • リテラル型“value”42truez.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)、省略可能プロパティ(?)、Union型(A | B)、文字列enum(リテラルUnion)、配列(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を使用します。

文字列Union型はどのように変換されますか?

文字列リテラルのUnion(例:"admin" | "user" | "guest")は簡潔にするためz.enum(["admin", "user", "guest"])に自動変換されます。混合Union(例:string | null)はz.union([z.string(), z.null()])を使用します。

TypeScriptのclassやジェネリック型定義は変換できますか?

classとジェネリック型はサポート範囲外です。このツールはinterfaceとtype aliasの変換に特化しています。具体的な型に適用されたユーティリティ型(Array<string>、Record<string, number>)はサポートされています。

コードはサーバーに送信されますか?

いいえ。TypeScriptパーサーとZodコードジェネレーターはすべてブラウザ内で動作します。ソースコードはお使いの端末から送信されません。