Позволяет не указывать неопциональное поле объекта при создании записи, автоматически заполняя его заданным значением по умолчанию.
Важно понимать, что модификатор NonRequired позволяет не указывать поле только при создании новой записи (операция create). При обновлении (операция update) значения вложенного объекта, значине NonRequired-поля должно быть явно указано (см примеры ниже).
Модификатор Heap.NonRequired поддерживается и имеет смысл только для полей Heap.Object и полей верхнего уровня таблицы.
import { Heap } from '@app/heap'
Heap.NonRequired(fieldSchema, default)
fieldSchema: HeapSchema
*
Схема, описывающая тип поля, которое делаем необязательным при создании записи.
Это может быть любой поддерживаемый тип поля heap-таблицы - простой или сложный.
default: fieldSchema serialized type
*
Значение по умолчанию для данного поля. Должно иметь тип, соответствующий fieldSchema
в сериализованном виде. Подробнее о том, как работают значения по умолчанию,
см. Руководство / Heap / Значения по умолчанию.
Аргумент fieldSchema c модификатором NonRequired.
const customers = Heap.Table('customers', {
name: Heap.String(),
stats: Heap.NonRequired(
Heap.Object({
ltv: Heap.NonRequired(Heap.Money(), [0, 'USD']),
purchasesCount: Heap.NonRequired(Heap.Integer(), 0),
}),
{ ltv: [0, 'USD'], purchasesCount: 0 },
),
})
await customers.create(ctx, { name: 'John Smith' })
// stats = { ltv: [0, 'USD'], purchasesCount: 0 }
const mary = await customers.create(ctx, { name: 'Mary', {
stats: { ltv: new Money(0, 'EUR') },
})
// stats = { ltv: [0, 'EUR'], purchasesCount: 0 }
// при обновлении модификатор NonRequired не имеет силы
await customers.update(ctx, {
id: mary.id,
stats: { purchasesCount: 1 },
})
// ошибка! поле ltv обязательное