{"id":"3b394cf1839bce15","repo":"sindresorhus/is","slug":"expected-value-which-is-null-or-undefined-recei","errorCode":null,"errorMessage":"Expected value which is `null or undefined`, received value of type `${is(value)}`.","messagePattern":"Expected value which is `null or undefined`, received value of type `(.+?)`\\.","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"source/index.ts","lineNumber":1799,"sourceCode":"}\n\nexport function assertNonNegativeNumber(value: unknown, message?: string): asserts value is number {\n\tif (!isNonNegativeNumber(value)) {\n\t\tthrow new TypeError(message ?? typeErrorMessage('non-negative number', value));\n\t}\n}\n\n// eslint-disable-next-line @typescript-eslint/no-restricted-types\nexport function assertNull(value: unknown, message?: string): asserts value is null {\n\tif (!isNull(value)) {\n\t\tthrow new TypeError(message ?? typeErrorMessage('null', value));\n\t}\n}\n\n// eslint-disable-next-line @typescript-eslint/no-restricted-types\nexport function assertNullOrUndefined(value: unknown, message?: string): asserts value is null | undefined {\n\tif (!isNullOrUndefined(value)) {\n\t\tthrow new TypeError(message ?? typeErrorMessage('null or undefined', value));\n\t}\n}\n\nexport function assertNumber(value: unknown, message?: string): asserts value is number {\n\tif (!isNumber(value)) {\n\t\tthrow new TypeError(message ?? typeErrorMessage('number', value));\n\t}\n}\n\nexport function assertNumericString(value: unknown, message?: string): asserts value is `${number}` {\n\tif (!isNumericString(value)) {\n\t\tthrow new TypeError(message ?? typeErrorMessage('string with a number', value));\n\t}\n}\n\n// eslint-disable-next-line @typescript-eslint/no-restricted-types\nexport function assertObject(value: unknown, message?: string): asserts value is object {\n\tif (!isObject(value)) {","sourceCodeStart":1781,"sourceCodeEnd":1817,"githubUrl":"https://github.com/sindresorhus/is/blob/7821031c66cdeb7256a0feb2d506535f9e84fcaf/source/index.ts#L1781-L1817","documentation":"Thrown by `assertNullOrUndefined()` (source/index.ts:1797) when the value is neither `null` nor `undefined` — i.e. something IS present where the code expected nothing. Falsy values like `0`, `''`, `false`, and `NaN` still fail because they are real values.","triggerScenarios":"Calling `assert.nullOrUndefined(value)` when the value holds any concrete value: a leftover handle/timer that should have been cleared, a falsy-but-real value like `0` or `''` assumed to count as 'empty', or state left over from a previous operation.","commonSituations":"Guarding against double-initialization ('this must not already be set') and hitting it because a singleton, listener, or timer wasn't torn down; assuming falsy means absent; test pollution where module-level state persists between tests.","solutions":["Find what set the value: this assert firing means cleanup or reset was skipped — clear the timer/handle/state (set it back to null) on the teardown path.","If falsy values like `0` or `''` should count as absent for your logic, this is the wrong check — test the condition explicitly instead of asserting null/undefined.","In tests, reset shared module state in beforeEach/afterEach to avoid cross-test leakage."],"exampleFix":"// before\nstart() {\n  assert.nullOrUndefined(this.timer); // throws on second start()\n  this.timer = setInterval(tick, 1000);\n}\n// after\nstop() {\n  clearInterval(this.timer);\n  this.timer = undefined; // reset so start() can assert cleanly\n}","handlingStrategy":"type-guard","validationCode":"if (value === null || value === undefined) {\n  assert.nullOrUndefined(value);\n}","typeGuard":"function isNullOrUndefined(v: unknown): v is null | undefined {\n  return v === null || v === undefined;\n}","tryCatchPattern":"try {\n  assert.nullOrUndefined(existing);\n} catch (error) {\n  if (error instanceof TypeError) {\n    // existing holds a real value — you expected an unset slot; handle the already-set case\n  }\n  throw error;\n}","preventionTips":["Use value == null (loose equality) as the idiomatic pre-check for null-or-undefined","Remember falsy values like 0, '', and false are NOT null/undefined and will fail this assert","When asserting a slot is unset before writing, handle the already-populated path explicitly rather than letting the assert throw"],"tags":["assertion","type-check","null","undefined","state-management"],"analyzedSha":"7821031c66cdeb7256a0feb2d506535f9e84fcaf","analyzedAt":"2026-07-31T18:34:06.268Z","schemaVersion":2}