Skip to content

record ​

Объект с произвольными ключами — словарь. Все значения проверяются одной схемой, ключи — по желанию тоже.

Сигнатура ​

ts
function record<V>(value: Schema<V>, msg?: Message): Schema<Record<string, V>>
function record<K extends string, V>(key: Schema<K>, value: Schema<V>, msg?: Message): Schema<Record<K, V>>

Параметры ​

ПараметрТипОписание
keySchema<K>Необязательная схема ключей: pipe(string(), pattern(...)), oneOf([...])
valueSchema<V>Схема значений
msgMessageСвоё сообщение, если значение пустое или не объект

Особенности ​

  • Ошибки ключа и значения привязаны к пути этого ключа: errors.ab.
  • Если схема ключа преобразует его (например, toLowerCase), в data попадёт преобразованный ключ.
  • Читаются только собственные ключи объекта. Ключ __proto__ из JSON безопасен — он не меняет прототип результата.

Коды ошибок ​

КодКогдаСообщение по умолчанию
requiredЗначение пустоеRequired
objectНе объект (или массив)Must be an object

Примеры ​

Переводы ​

ts
const title = record(oneOf(['ru', 'en', 'zh']), pipe(string(), maxLength(200)));
// Record<'ru' | 'en' | 'zh', string>

validate(title, { ru: 'Привет', en: 'Hello' }).valid; // true
validate(title, { de: 'Hallo' }).errors;              // { de: 'Must be one of: ru, en, zh' }

Количество товаров по ID ​

ts
const cart = record(pipe(string(), pattern(/^\d+$/)), pipe(number(), integer(), min(1)));

validate(cart, { '15': 2, '42': 1 }).data; // { '15': 2, '42': 1 }

См. также ​

  • object — объект с известными полями
  • oneOf — ограничить ключи