object
Объект с заданными полями. Проверяет каждое поле своей схемой и собирает ошибки всех полей сразу.
Сигнатура
ts
function object<S extends Record<string, Schema>>(shape: S, options?: ObjectOptions): Schema<ObjectOut<S>>
interface ObjectOptions {
unknown?: 'strip' | 'strict' | 'passthrough';
message?: Message;
}Параметры
| Параметр | Тип | Описание |
|---|---|---|
shape | Record<string, Schema> | Поля объекта и их схемы |
options.unknown | 'strip' | 'strict' | 'passthrough' | Что делать с полями, которых нет в shape. По умолчанию strip |
options.message | Message | Своё сообщение, если значение пустое или не объект |
Лишние поля
| Режим | Что происходит с полями не из shape |
|---|---|
strip (по умолчанию) | Удаляются из data. Защищает от mass assignment: в базу не попадёт isAdmin: true из запроса |
strict | Ошибка unknownKey на каждом лишнем поле |
passthrough | Остаются в data как есть |
Коды ошибок
| Код | Когда | Сообщение по умолчанию |
|---|---|---|
required | Значение пустое | Required |
object | Не объект (или массив) | Must be an object |
unknownKey | Лишнее поле в режиме strict | Unknown 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 — тип объекта из схемы