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>>Параметры
| Параметр | Тип | Описание |
|---|---|---|
key | Schema<K> | Необязательная схема ключей: pipe(string(), pattern(...)), oneOf([...]) |
value | Schema<V> | Схема значений |
msg | Message | Своё сообщение, если значение пустое или не объект |
Особенности
- Ошибки ключа и значения привязаны к пути этого ключа:
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 }