Делает поле объекта опциональным (добавляет ?
к результирующему типу свойства объекта).
Опциональные поля можно не указывать при создании записи, при этом они не будут принимать никакого значения по
умолчанию (ключа просто не будет в объекте, обращение к нему будет возвращать значение undefined
).
При чтении (десериализации) записи, для опциональных полей значение по умолчанию (параметр default
)
всегда игнорируется.
Уже заданное значение опционального поля верхнего уровня может быть сброшено, если в операции update передать
значение null
. Эта возможность не работает для nullable полей, поэтому следует избегать
применять модификатор Optional к Union-полям с возможным значением null
.
Модификатор Heap.Optional поддерживается и имеет смысл только для полей Heap.Object и полей верхнего уровня таблицы.
import { Heap } from '@app/heap'
Heap.Optional(fieldSchema)
HeapSchema
* Аргумент fieldSchema c модификатором Optional.
const customers = Heap.Table('customers', {
name: Heap.String(),
age: Heap.Optional(Heap.Number()),
})
await customers.create(ctx, { name: 'John Smith' })
// age = undefined
const mary = await customers.create(ctx, { name: 'Mary', age: 22 })
// age = 22
// Optional-поля принимают на вход null для сброса значения в undefined
await customers.update(ctx, { id: mary.id, age: null })
// age = undefined