sindresorhus/is · error · TypeError
Expected value which is `finite number`, received value of t
Error message
Expected value which is `finite number`, received value of type `${is(value)}`. What it means
Thrown by `assertFiniteNumber` (source/index.ts:1614) when the value is not a finite number — i.e. it fails `Number.isFinite`. Non-numbers, `NaN`, `Infinity`, and `-Infinity` all fail. This guards arithmetic pipelines against silent NaN/Infinity propagation, which the library's fail-fast philosophy treats as an immediate error.
Source
Thrown at source/index.ts:1616
throw new TypeError(message ?? typeErrorMessage('Error', value));
}
}
export function assertEvenInteger(value: number, message?: string): asserts value is number {
if (!isEvenInteger(value)) {
throw new TypeError(message ?? typeErrorMessage('even integer', value));
}
}
export function assertFalsy(value: unknown, message?: string): asserts value is Falsy {
if (!isFalsy(value)) {
throw new TypeError(message ?? typeErrorMessage('falsy', value));
}
}
export function assertFiniteNumber(value: unknown, message?: string): asserts value is number {
if (!isFiniteNumber(value)) {
throw new TypeError(message ?? typeErrorMessage('finite number', value));
}
}
export function assertFloat32Array(value: unknown, message?: string): asserts value is Float32Array {
if (!isFloat32Array(value)) {
throw new TypeError(message ?? typeErrorMessage('Float32Array', value));
}
}
export function assertFloat64Array(value: unknown, message?: string): asserts value is Float64Array {
if (!isFloat64Array(value)) {
throw new TypeError(message ?? typeErrorMessage('Float64Array', value));
}
}
export function assertFormData(value: unknown, message?: string): asserts value is FormData {
if (!isFormData(value)) {
throw new TypeError(message ?? typeErrorMessage('FormData', value));View on GitHub ↗ (pinned to 7821031c66)
Solutions
- Trace the NaN/Infinity to its source — usually a failed parse or division by zero — and validate inputs there
- Convert numeric strings explicitly with `Number(value)` and check the parse succeeded before asserting
- Guard divisions: check the divisor is non-zero before computing
- If Infinity is a legitimate value in your domain, use `assert.number(value)` instead
Example fix
// before
const rate = Number(input);
assert.finiteNumber(rate); // throws if input was 'abc'
// after
const rate = Number(input);
if (Number.isNaN(rate)) throw new Error(`Invalid rate input: ${input}`);
assert.finiteNumber(rate); Defensive patterns
Strategy: validation
Validate before calling
if (Number.isFinite(value)) {
assert.finiteNumber(value);
} Type guard
function isFiniteNumber(value: unknown): value is number {
return typeof value === 'number' && Number.isFinite(value);
} Try / catch
try {
assert.finiteNumber(value);
} catch (error) {
if (error instanceof TypeError) {
// NaN, Infinity, -Infinity, or a non-number — often from division by zero or failed parse
} else throw error;
} Prevention
- Use Number.isFinite (not the global isFinite, which coerces strings) as the pre-check
- Guard arithmetic that can produce Infinity (division by zero) or NaN (0/0, failed parseFloat) before passing results downstream
- Validate numeric inputs at the trust boundary so infinities never propagate deep into the code
When it happens
Trigger: Calling `assert.finiteNumber(value)` with `NaN` (e.g. from `parseInt('abc')` or `0/0`), `Infinity` (from division by zero or overflow), a numeric string like `'42'`, null, or undefined.
Common situations: Parsing user/config input with `parseFloat`/`Number()` and getting NaN from malformed strings; division by zero in metrics or ratio calculations; JSON payloads carrying numbers as strings; missing object properties yielding undefined in arithmetic.
Related errors
- Expected value which is `empty map`, received value of type
- Expected value which is `empty object`, received value of ty
- Expected value which is `empty set`, received value of type
- Expected value which is `empty string`, received value of ty
- Expected value which is `empty string or whitespace`, receiv
AI-assisted analysis of sindresorhus/is@7821031c66 (2026-07-31).
Data as JSON: /data/errors/3180b09d1b65a585.json.
Report an issue: GitHub ↗.