sindresorhus/is · error · TypeError
Expected value which is `null`, received value of type `${is
Error message
Expected value which is `null`, received value of type `${is(value)}`. What it means
Thrown by `assertNull()` (source/index.ts:1790) when the value is anything other than exactly `null`. This is a strict identity check — `undefined`, `0`, `''`, and `false` all fail. It's typically used to assert that something has NOT been set or was explicitly cleared.
Source
Thrown at source/index.ts:1792
}
}
export function assertNonNegativeInteger(value: unknown, message?: string): asserts value is number {
if (!isNonNegativeInteger(value)) {
throw new TypeError(message ?? typeErrorMessage('non-negative integer', value));
}
}
export function assertNonNegativeNumber(value: unknown, message?: string): asserts value is number {
if (!isNonNegativeNumber(value)) {
throw new TypeError(message ?? typeErrorMessage('non-negative number', value));
}
}
// eslint-disable-next-line @typescript-eslint/no-restricted-types
export function assertNull(value: unknown, message?: string): asserts value is null {
if (!isNull(value)) {
throw new TypeError(message ?? typeErrorMessage('null', value));
}
}
// eslint-disable-next-line @typescript-eslint/no-restricted-types
export function assertNullOrUndefined(value: unknown, message?: string): asserts value is null | undefined {
if (!isNullOrUndefined(value)) {
throw new TypeError(message ?? typeErrorMessage('null or undefined', value));
}
}
export function assertNumber(value: unknown, message?: string): asserts value is number {
if (!isNumber(value)) {
throw new TypeError(message ?? typeErrorMessage('number', value));
}
}
export function assertNumericString(value: unknown, message?: string): asserts value is `${number}` {
if (!isNumericString(value)) {View on GitHub ↗ (pinned to 7821031c66)
Solutions
- If either absent value is acceptable, use `assert.nullOrUndefined(value)` instead.
- Normalize at the boundary: `value ?? null` to convert `undefined` to `null` when that's the intended semantic.
- If the assertion is guarding 'this slot must be empty before reuse', find why the previous consumer didn't reset it to null.
Example fix
// before assert.null_(cache.entry); // entry was never assigned → undefined → throws // after assert.nullOrUndefined(cache.entry); // accept both absent states
Defensive patterns
Strategy: type-guard
Validate before calling
if (value === null) {
assert.null_(value);
} Type guard
function isNull(v: unknown): v is null {
return v === null;
} Try / catch
try {
assert.null_(result);
} catch (error) {
if (error instanceof TypeError) {
// result is undefined or a real value, not null — check what produced it
}
throw error;
} Prevention
- Compare with === null; this assert rejects undefined, so the two are not interchangeable here
- Know your API's convention: some return null for 'not found' and undefined for 'not set' — assert the one it actually returns
- Use is.null_(value) in conditionals; note the trailing underscore since null is a reserved word
When it happens
Trigger: Calling `assert.null_(value)` / `assertNull(value)` with `undefined` (the most common confusion — e.g. a missing object property or uninitialized variable), or with any value when the code expected a cleared/absent state.
Common situations: APIs that use `undefined` for 'never set' but `null` for 'explicitly cleared' — asserting null on a property that was simply never assigned; DOM/library methods returning `undefined` where `null` was expected; state that should have been reset before reuse but wasn't.
Related errors
- Expected value which is `non-empty array`, received value of
- Expected value which is `non-empty map`, received value of t
- Expected value which is `non-empty object`, received value o
- Expected value which is `non-empty set`, received value of t
- Expected value which is `non-empty string`, received value o
AI-assisted analysis of sindresorhus/is@7821031c66 (2026-07-31).
Data as JSON: /data/errors/f1048bf248148e2c.json.
Report an issue: GitHub ↗.