Skip to content

object ​

Объект с заданными полями. Проверяет каждое поле своей схемой и собирает ошибки всех полей сразу.

Сигнатура ​

ts
function object<S extends Record<string, Schema>>(shape: S, options?: ObjectOptions): Schema<ObjectOut<S>>

interface ObjectOptions {
  unknown?: 'strip' | 'strict' | 'passthrough';
  message?: Message;
}

Параметры ​

ПараметрТипОписание
shapeRecord<string, Schema>Поля объекта и их схемы
options.unknown'strip' | 'strict' | 'passthrough'Что делать с полями, которых нет в shape. По умолчанию strip
options.messageMessageСвоё сообщение, если значение пустое или не объект

Лишние поля ​

РежимЧто происходит с полями не из shape
strip (по умолчанию)Удаляются из data. Защищает от mass assignment: в базу не попадёт isAdmin: true из запроса
strictОшибка unknownKey на каждом лишнем поле
passthroughОстаются в data как есть

Коды ошибок ​

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

Тексты можно поменять: см. Сообщения и локализация.

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

  • Необязательные поля (optional) без значения не попадают в data вовсе.
  • Читаются только собственные поля объекта, не из прототипа. Ключ __proto__ во входных данных безопасен.
  • Ошибки вложенных объектов имеют путь: address.city.

Примеры ​

Вложенные объекты ​

ts
const Order = object({
  customer: object({
    name: string(),
    phone: string(),
  }),
  address: object({
    city: string(),
    street: string(),
  }),
});

validate(Order, { customer: { name: 'Ivan' }, address: {} }).errors;
// { 'customer.phone': 'Required', 'address.city': 'Required', 'address.street': 'Required' }

Строгий API ​

ts
const UpdateUser = object({ name: optional(string()) }, { unknown: 'strict' });

validate(UpdateUser, { name: 'Ivan', isAdmin: true }).errors; // { isAdmin: 'Unknown field' }

См. также ​

  • array
  • optional — необязательные поля
  • sameAs — сравнение полей
  • TypeScript — тип объекта из схемы