Перейти к основному содержимому

FormProxy

type FormProxy<T> = GroupNode<T> & Omit<FormControlsProxy<T>, keyof GroupNode<T>> & object;

Defined in: core/types/form-proxy.ts:131

Комбинированный тип для GroupNode с Proxy доступом к полям

Объединяет методы и свойства GroupNode с типизированными полями формы. Это позволяет использовать как API GroupNode, так и прямой доступ к полям.

Type Declaration

$

readonly $: FormControlsProxy<T>;

Escape-hatch пространство имён «controls»: типобезопасный доступ ко ВСЕМ полям формы по имени, включая поля, чьи имена совпадают с членами GroupNode (value/status/id/errors/…), недостижимые через form.<name>.

Example

// модель: { status: string; email: string }
form.status; // ReadonlySignal<FieldStatus> — агрегат GroupNode (не поле!)
form.$.status; // FieldNode<string> — поле пользователя
form.$.status.setValue('active');
form.$.email; // FieldNode<string> — так же доступны и незатенённые поля

Type Parameters

T

T

Тип модели данных формы

Example

interface UserForm {
email: string;
profile: {
name: string;
age: number;
};
}

const form = createForm<UserForm>(schema);

// Доступ к методам GroupNode
await form.validate();
const values = form.getValue();
console.log(form.valid.value);

// Прямой доступ к полям (через Proxy)
form.email.setValue('test@mail.com');
form.profile.name.setValue('John');

Remarks

Зарезервированные имена. Прямой доступ form.<name> отдаёт приоритет собственным членам GroupNode (value, status, id, errors, disabled, reset, submit, …). Поэтому поле модели, названное любым из этих имён, недостижимо как form.<name> — там будет агрегированный сигнал/метод узла, а не FieldNode. Такие имена исключены из полевого пространства имён на уровне типов (через Omit<…, keyof GroupNode>), чтобы затенение не компилировалось молча. Для доступа к любому полю по имени — включая затенённые — используйте escape-hatch пространство FormProxy.$: form.$.status, form.$.id, form.$.value.