parseFiniteNumber
Parses a value into a finite number. This parser combines the normalizeFiniteNumber normalizer with the validateFiniteNumber primitive validator to produce a canonical finite numeric value.
The parser never throws and never mutates input. It returns a structured ParseResult<number> describing success or failure.
Signature
function parseFiniteNumber(
value: unknown,
field?: string
): ParseResult<number>
Behavior
- Accepted inputs:
- Primitive finite numbers (3.14, 0, -7)
- Numeric strings ("3", " 3.14 ", "0007", "2.0")
- Strings are trimmed before parsing
- Only simple decimal notation is allowed
- Rejected inputs:
- NaN, Infinity, and -Infinity
- Produces: "Value could not be normalized into a finite number"
- Rejected inputs:
- Non-numeric strings ("abc").
- Malformed numeric strings ("3.14.5", "3e2").
- Empty or whitespace-only strings.
- Objects, arrays, functions.
- Booleans.
nullandundefined.- Boxed
Numberobjects.- These produce: "Value must be a finite number"
Returns
A ParseResult<number> object:
ok: trueAnd the finite number when parsing succeeds.ok: false, value: null: And a list of issues when parsing fails.
Examples
parseFiniteNumber(" 3.14 ")
// { ok: true, value: 3.14, issues: [] }
parseFiniteNumber("3e2")
// { ok: false, value: null, issues: ["Value must be a finite number"] }
parseFiniteNumber(NaN)
// { ok: false, value: null, issues: ["Value could not be normalized into a finite number"] }
Notes
- This parser is stricter than parseNumber because it rejects scientific notation.
- For integer-only parsing, use parseInteger.