Skip to content

Пустые значения ​

tinyval считает пустыми три значения: undefined, null и пустую строку ''.

Как это работает ​

ЗначениеОбязательная схема (string(), object()…)optional()nullable()
undefinedошибка requiredпропуск / значение по умолчаниюошибка required
''ошибка requiredпропуск / значение по умолчаниюошибка required
nullошибка requiredошибка requirednull

Почему так ​

Из HTML-форм незаполненное поле приходит пустой строкой, а не undefined. Если считать '' обычной строкой, то обязательное поле «Имя» с пустым инпутом проходило бы проверку, а необязательное поле «Сайт» падало бы на проверке формата URL.

Laravel решает это так же — middleware ConvertEmptyStringsToNull превращает пустые строки в null до валидации.

Частые случаи ​

ts
// Обязательное поле: '' даёт ошибку Required
name: string()

// Необязательное: '' и undefined пропускаются, поле не попадёт в data
website: optional(pipe(string(), pattern(/^https?:\/\//)))

// Необязательное со значением по умолчанию
role: optional(oneOf(['admin', 'user']), 'user')

// Может быть null (например, из JSON с сервера) или отсутствовать
middleName: optional(nullable(string()))

// Нужна именно пустая строка как значение
comment: optional(string(), '')

Строка из пробелов ​

' ' — не пустая строка, поэтому string() её пропустит. Чтобы запретить такие значения, обрежьте пробелы и проверьте длину:

ts
name: pipe(string(), trim(), minLength(1))

См. также ​

  • optional — необязательные поля
  • nullable — поля со значением null
  • trim — обрезка пробелов