RMF005 — a field edited through a control that hands back another kind
A field turns what its control produced back into its value by the control's own type:
type="number" and type="range" hand back a number, type="checkbox" true or false, type="date" a
day to a Date and text to a date written as text, and every other control hands back its text.
So a field holding a number, written without type="number", fills the form with text on the first
keystroke — and the schema reports a value the reader never typed wrong.
<input aria-label="Age" name={age.name} value={age.inputValue} oninput={age.oninput} /> // ✗ text
<input aria-label="Age" type="number" name={age.name} value={age.inputValue} oninput={age.oninput} /> // ✓
A Select hands back the chosen option's value and a radio its own, both as text, and no control picks a
number from a list: a number field chosen from one is taken as a number by the schema — z.coerce.number() in Zod — which is what
the report says there.
Reported once the field holds a number or a day, naming the type to write — and for a field that holds
text, edited through type="number", type="range" or a checkbox, which hand back a number or true or
false — and for a field that holds true or false, edited through an <input> that hands back text, which
belongs in <input type="checkbox" checked={…}>. ramonda-check reports
the same before it ships, as form-value-in-the-wrong-control — and that one reads
the markup, so it finds a field that is still empty too.
Next
- All diagnostics — every code the framework can report.
- Checking your app — the faults proved from the source, before anything runs.