Метаданные и реестры¶
Часто бывает полезно связать схему с некоторыми дополнительными метаданными для документирования, генерации кода, структурированных выводов ИИ, проверки форм и других целей.
Реестры¶
Метаданные в Zod обрабатываются с помощью реестров. Реестры — это наборы схем, каждая из которых связана с некоторыми строго типизированными метаданными. Чтобы создать простой реестр:
1 2 3 |
|
Чтобы зарегистрировать, найти и удалить схемы из этого реестра:
1 2 3 4 5 6 7 |
|
TypeScript требует, чтобы метаданные для каждой схемы соответствовали типу метаданных реестра.
1 2 |
|
Особый подход к
id
— реестры Zod обрабатывают свойствоid
особым образом. Если несколько схем зарегистрированы с одинаковым значениемid
, будет сгенерирована ошибкаError
. Это правило действует для всех реестров, включая глобальный реестр.
.register()
¶
Примечание — Этот метод отличается тем, что он не возвращает новую схему, а возвращает исходную схему. Ни один другой метод Zod не делает этого! Это включает в себя
.meta()
и.describe()
(описанные ниже), которые возвращают новый экземпляр.
Схемы предоставляют метод .register()
для более удобного добавления в реестр.
1 2 3 4 5 6 |
|
Это позволяет вам определять метаданные «встроенными» в ваших схемах.
1 2 3 4 5 6 7 8 |
|
Если реестр определен без типа метаданных, его можно использовать как общую «коллекцию», метаданные не требуются.
1 2 3 4 |
|
Metadata¶
z.globalRegistry
¶
Для удобства Zod предоставляет глобальный реестр (z.globalRegistry
), который можно использовать для хранения метаданных для генерации JSON Schema или других целей. Он принимает следующие метаданные:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Чтобы зарегистрировать некоторые метаданные в z.globalRegistry
для схемы:
1 2 3 4 5 6 7 8 |
|
.meta()
¶
Для более удобного подхода используйте метод .meta()
, чтобы зарегистрировать схему в z.globalRegistry
.
1 2 3 4 5 |
|
Вызов .meta()
без аргумента извлекает метаданные для схемы.
1 2 |
|
Метаданные связаны с конкретным экземпляром схемы. Это важно иметь в виду, особенно учитывая, что методы Zod являются неизменяемыми — они всегда возвращают новый экземпляр.
1 2 3 4 5 |
|
.describe()
¶
Метод .describe()
по-прежнему существует для обеспечения совместимости с Zod 3, но теперь рекомендуется использовать метод .meta()
.
Метод .describe()
является сокращением для регистрации схемы в z.globalRegistry
только с полем description
.
1 2 3 4 5 |
|
Пользовательские реестры¶
Вы уже видели простой пример пользовательского реестра:
1 2 3 |
|
Давайте рассмотрим несколько более сложных шаблонов.
Ссылки на выведенные типы¶
Часто бывает полезно, чтобы тип метаданных ссылался на выведенный тип схемы. Например, вы можете захотеть, чтобы поле examples
содержало примеры вывода схемы.
1 2 3 4 5 6 7 8 9 |
|
Специальный символ z.$output
является ссылкой на тип вывода, выведенный из схемы (z.infer<typeof schema>
). Аналогично, вы можете использовать z.$input
для ссылки на тип ввода.
Ограничение типов схем¶
Передайте второй общий параметр в z.registry()
, чтобы ограничить типы схем, которые могут быть добавлены в реестр. Этот реестр принимает только строковые схемы.
1 2 3 4 5 6 7 8 9 10 |
|