Typed field handles derived FROM THE FORM — no separate registry to declare
or import. The form's codecs slot is the single source; the store carries
its type; this reads it back:
Handles are created lazily per key and cached, so f.steps is stable and
subscribing costs nothing until a handle is actually read in an effect.
current is null while the key is inactive in the current branch — the form
decides what exists; the page just places controls.
Type Parameters
State
The store's state union (inferred, unused here).
Ext
The store's external-context type (inferred, unused here).
CodecsextendsCodecRegistry
The registry to derive per-key value/meta types from:
INFERRED from the store argument, which carries it from the form.
Typed field handles derived FROM THE FORM — no separate registry to declare or import. The form's
codecsslot is the single source; the store carries its type; this reads it back:const form = defineForm({ defs: { steps: STEPS, ... }, resolve }); const f = typedFields(form.createStore({ ext })); f.steps.current // FieldSnapshot<number, NumberMeta> | null
Handles are created lazily per key and cached, so
f.stepsis stable and subscribing costs nothing until a handle is actually read in an effect.currentis null while the key is inactive in the current branch — the form decides what exists; the page just places controls.