TypeScript → Zod スキーマ
TypeScriptのinterfaceとtype宣言をZodバリデーションスキーマに即座に変換。Union型・省略可能フィールド・配列・enum・ネストオブジェクト・型参照に対応。無料、完全ブラウザ完結。
使い方
- TypeScriptの
interfaceまたはtype宣言を左のパネルに貼り付けます。 - 入力停止から300ms後に自動でバリデーションと変換が行われます。
- Zodスキーマを生成ボタンで強制変換できます。
- コピーボタンでZod出力をクリップボードにコピーします。
- 結果をプロジェクトに貼り付けます。出力には
import文とexport typeの型推論行がすでに含まれています。
対応TypeScript機能
- 基本型:
string、number、boolean、null、undefined、any、unknown、void、never、bigint、symbol - 省略可能プロパティ:
prop?: type→.optional() - Union型:
A | B→z.union([A, B]) - 文字列enum:
“a” | “b” | “c”→z.enum([“a”, “b”, “c”]) - 配列:
T[]/Array<T>→z.array(T) - ネストオブジェクト:インラインオブジェクト型 →
z.object({}) - 相互参照:宣言済み型間の参照 → Schemaの定数
- readonly:
readonly修飾子を受け入れ、変換時に無視(ZodスキーマはデフォルトでImmutable) - ユーティリティ型:
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)、省略可能プロパティ(?)、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コードジェネレーターはすべてブラウザ内で動作します。ソースコードはお使いの端末から送信されません。