Vai al contenuto

Trasformatore di schema da TypeScript a Zod — Numio

Genera schemi Zod dalle interfacce TypeScript e tipi con ts-to-zod. Ogni tipo Foo diventa uno fooSchema esportato e i tag JSDoc come @format email o @minimum diventano validatori Zod.

I tuoi tipi API esistono già come interfacce TypeScript e desideri la convalida runtime delle richieste in arrivo senza scrivere manualmente gli schemi.

TypeScript

Zod Schema

Quando usarlo

  • I tuoi tipi API esistono già come interfacce TypeScript e desideri la convalida runtime delle richieste in arrivo senza scrivere manualmente gli schemi.
  • Convalidi l'input del modulo con Zod e desideri che lo schema rimanga coerente con il tipo TypeScript condiviso.

Come si usa

  1. Incolla le interfacce TypeScript o digita gli alias; aggiungi tag JSDoc come @minimum 13 o @format email per ottenere validatori.
  2. Nelle impostazioni, attiva Mantieni commenti TSDoc per copiare i commenti nell'output oppure Ignora la creazione di validatori zod dalle annotazioni JSDoc per ignorare i tag.
  3. Il sorgente viene convertito localmente in un Web Worker del browser; copia il codice che importa z da "zod".

TypeScript

export interface Signup {
  /**
   * @format email
   */
  email: string;
  /**
   * @minimum 13
   * @maximum 120
   */
  age: number;
  plan: "free" | "pro";
  referrer?: string | null;
  createdAt: Date;
}

Schemi Zod

import { z } from "zod"

export const signupSchema = z.object({
  email: z.string().email(),
  age: z.number().min(13).max(120),
  plan: z.union([z.literal("free"), z.literal("pro")]),
  referrer: z.string().optional().nullable(),
  createdAt: z.date(),
})

Dettagli e limiti

La conversione avviene localmente in un Web Worker del browser; l’input non viene caricato su un server. Al primo utilizzo il browser scarica il modulo di conversione necessario.

Vengono convertiti solo i tipi. Le funzioni e le costanti esportate non producono alcuno schema.

Se un tipo fa riferimento a un tipo che non è presente nell'input, il convertitore segnala un errore di dipendenza mancante invece di generare uno schema.

Gli schemi sono ordinati in base alla dipendenza, quindi un tipo a cui si fa riferimento come Author viene emesso prima del tipo che lo utilizza.

FAQ

Come vengono convertiti i campi facoltativi e nulli?

riferimento?: stringa | null diventa z.string().optional().nullable(); una proprietà digitata Autore | null diventa authorSchema.nullable().

Come viene gestita la data?

Una proprietà Date diventa z.date(), che accetta oggetti Date, non stringhe ISO. Utilizza z.coerce.date() per l'input JSON.

Perché ricevo "Some schemas can't be generated due to direct or indirect missing dependencies"?

Un tipo fa riferimento a un altro tipo che non è presente nel codice incollato. Incolla anche i tipi di riferimento.

Specifiche e riferimenti