Metadatos y registros
A menudo es útil asociar un esquema con metadatos adicionales para documentación, generación de código, salidas estructuradas de IA, validación de formularios y otros propósitos.
Registros (Registries)
Los metadatos en Zod se manejan a través de registros. Los registros son colecciones de esquemas, cada uno asociado con algunos metadatos fuertemente tipados. Para crear un registro simple:
Para registrar, buscar y eliminar esquemas de este registro:
TypeScript impone que los metadatos para cada esquema coincidan con el tipo de metadatos del registro.
Manejo especial para id — Los registros de Zod tratan la propiedad id de manera especial. Se lanzará un Error si se registran múltiples esquemas con el mismo valor id. Esto es cierto para todos los registros, incluido el registro global.
.register()
Nota — Este método es especial porque no devuelve un esquema nuevo; en su lugar, devuelve el esquema original. ¡Ningún otro método de Zod hace esto! Eso incluye .meta() y .describe() (documentados abajo) que devuelven una nueva instancia.
Los esquemas proporcionan un método .register() para agregarlo más convenientemente a un registro.
Esto te permite definir metadatos "en línea" en tus esquemas.
Si se define un registro sin un tipo de metadatos, puedes usarlo como una "colección" genérica, sin requerir metadatos.
Metadatos
z.globalRegistry
Para mayor comodidad, Zod proporciona un registro global (z.globalRegistry) que se puede usar para almacenar metadatos para la generación de JSON Schema u otros propósitos. Acepta los siguientes metadatos:
Para registrar algunos metadatos en z.globalRegistry para un esquema:
Para aumentar globalmente la interfaz GlobalMeta, usa la fusión de declaraciones. Agrega lo siguiente en cualquier lugar de tu código base. Crear un archivo zod.d.ts en la raíz de tu proyecto es una convención común.
.meta()
Para un enfoque más conveniente, usa el método .meta() para registrar un esquema en z.globalRegistry.
Llamar a .meta() sin un argumento recuperará los metadatos para un esquema.
Los metadatos están asociados con una instancia de esquema específica. Es importante tener esto en cuenta, especialmente porque los métodos de Zod son inmutables: siempre devuelven una nueva instancia.
.describe()
El método .describe() todavía existe por compatibilidad con Zod 3, pero .meta() es ahora el enfoque recomendado.
El método .describe() es una abreviatura para registrar un esquema en z.globalRegistry con solo un campo description.
Registros personalizados
Ya has visto un ejemplo simple de un registro personalizado:
Veamos algunos patrones más avanzados.
Referenciar tipos inferidos
A menudo es valioso que el tipo de metadatos haga referencia al tipo inferido de un esquema. Por ejemplo, es posible que desees que un campo examples contenga ejemplos de la salida del esquema.
El símbolo especial z.$output es una referencia al tipo de salida inferido del esquema (z.infer<typeof schema>). De manera similar, puedes usar z.$input para referenciar el tipo de entrada.
Restringir tipos de esquema
Pasa un segundo genérico a z.registry() para restringir los tipos de esquema que se pueden agregar a un registro. Este registro solo acepta esquemas de cadena.

