FormSchemaNode
Defined in: form/types/schema-node.ts:64
Узел единой схемы M1 — layout-дерево, обходимое createForm({ model, schema })
и рендерерами (schema-валидация живёт отдельно — @reformer/core/validation).
Узел совмещает несколько ролей (различаются рантаймом по форме):
- поле — несёт
value: Signal(сигнал моделиmodel.$.x) +component/validators; - массив —
{ array: model.<path>, item(itemModel) }; - контейнер/ветка — вложенные узлы (
children), опц. условиеwhen; - record-of-fields — под-узлы под произвольными именованными ключами (индексная сигнатура).
Индексная сигнатура ([key: string]: unknown) отражает свободный рекурсивный обход: под-узлы
допустимы под любым ключом. Известные поля типизированы (даёт автокомплит и проверку их типов).
Indexable
[key: string]: unknown
Свободная вложенность: record-of-fields и произвольные под-узлы.
Properties
array?
optional array: SchemaArrayControl;
Defined in: form/types/schema-node.ts:99
Реактивный массив модели (model.<path>) — маркер узла-массива (вместе с item).
children?
optional children: readonly (string | number | Signal<any> | FormSchemaNode)[];
Defined in: form/types/schema-node.ts:97
Содержимое узла: под-узлы (даёт контекстную типизацию вложенным литералам — value/validators/when) и текстовые части. Текст (литерал, число, сигнал модели) — такой же ребёнок, как узел: core его не интерпретирует (обход пропускает примитивы и не спускается внутрь сигнала), а рендерер выводит на своём месте в порядке следования.
component?
optional component: ElementType;
Defined in: form/types/schema-node.ts:76
UI-компонент либо нативный HTML-тег ('div', 'p', 'h3') для презентационной вёрстки
прямо в схеме. Опционален: core-часть работает без UI (значение/валидация) и component
не интерпретирует — он доезжает до рендерера как есть.
componentProps?
optional componentProps: Record<string, unknown>;
Defined in: form/types/schema-node.ts:78
Props компонента. Также «клапан» для вложенности под-узлов (напр. steps визарда).
debounce?
optional debounce: number;
Defined in: form/types/schema-node.ts:82
Задержка (мс) перед запуском асинхронной валидации.
disabled?
optional disabled: boolean;
Defined in: form/types/schema-node.ts:80
initialValue?
optional initialValue: unknown;
Defined in: form/types/schema-node.ts:107
Значение нового элемента массива для кнопки «Добавить»: либо готовое значение,
либо фабрика () => value. Тип не различает варианты (union unknown | (() => unknown)
схлопывается в unknown) — рантайм различает по typeof initialValue === 'function'.
item()?
optional item: (itemModel) => FormSchemaNode;
Defined in: form/types/schema-node.ts:101
Схема элемента массива: под-модель элемента → узел поддерева.
Parameters
itemModel
any
Returns
FormSchemaNode
selector?
optional selector: string;
Defined in: form/types/schema-node.ts:84
Идентификатор узла (для wizard/tabs/renderBehavior).
testId?
optional testId: string;
Defined in: form/types/schema-node.ts:90
⚠️ Рантайм этого поля НЕ ЧИТАЕТ — renderer-react берёт testId из componentProps.testId
(иначе выводит из пути сигнала). Поле оставлено только потому, что RenderSchemaNode
рендерера объявляет свой одноимённый; пишите componentProps: { testId: '…' }.
updateOn?
optional updateOn: "change" | "blur" | "submit";
Defined in: form/types/schema-node.ts:79
value?
optional value: unknown;
Defined in: form/types/schema-node.ts:70
«Ручка» значения поля — маркер узла-поля. Обычно сигнал модели (model.$.<path>), но форма
зависит от таргета (для массива model.$.x — дерево сигналов; в renderer-типах сужается до
Signal). Движок разбирает узел как поле рантаймом по value instanceof Signal.