Собственные валидаторы
Введение
Автоматически создаваемые типы Zod для примитивных полей не всегда могут покрыть все
ваши потребности. К примеру, для поле с атрибутом Attr
по умолчанию создаётся схема типа
z.unknown()
. Это ограничивает возможности валидации структур.
Кроме того, иногда нужно убедиться, что строка длиннее определённого количества символов, или число меньше какого-либо максимального значения.
Для этого вы можете назначить свои схемы Zod любому из полей. Это можно сделать двумя способами, о которых пойдёт речь ниже.
Схема, которую вы определите, не дополняет, а заменяет автоматически сгенерированную. Учитывайте это при написании типов.
Определение через статическое свойство
Для JavaScript и TypeScript можно определить свои схемы для полей при помощи статического
свойства класса вашей модели, как это сделано со свойством entity
:
import { z } from 'zod'
export class User extends Model {
public static entity = 'user'
public static $zodSchemas = {
age: z.number().gt(18)
}
@NumberField(0)
public age: number
}
В итоге свойство age
будет валидироваться определённой вами схемой, остальные поля будут
работать как раньше. Базовая валидация для Num работать не будет.
Определение через декораторы
То же самое можно сделать с помощью декоратора ZodFieldType
:
import { z } from 'zod'
import { ZodFieldType } from '@rattus-orm/plugin-zod-validate'
export class User extends Model {
public static entity = 'user'
@ZodFieldType(z.number().gt(18))
@NumberField(0)
public age: number
}