{"id":"ad7f28f87fd3609b","repo":"sindresorhus/is","slug":"expected-value-which-is-integer-received-value","errorCode":null,"errorMessage":"Expected value which is `integer`, received value of type `${is(value)}`.","messagePattern":"Expected value which is `integer`, received value of type `(.+?)`\\.","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"source/index.ts","lineNumber":1695,"sourceCode":"\t\tthrow new TypeError(message ?? typeErrorMessage('Int16Array', value));\n\t}\n}\n\nexport function assertInt32Array(value: unknown, message?: string): asserts value is Int32Array {\n\tif (!isInt32Array(value)) {\n\t\tthrow new TypeError(message ?? typeErrorMessage('Int32Array', value));\n\t}\n}\n\nexport function assertInt8Array(value: unknown, message?: string): asserts value is Int8Array {\n\tif (!isInt8Array(value)) {\n\t\tthrow new TypeError(message ?? typeErrorMessage('Int8Array', value));\n\t}\n}\n\nexport function assertInteger(value: unknown, message?: string): asserts value is number {\n\tif (!isInteger(value)) {\n\t\tthrow new TypeError(message ?? typeErrorMessage('integer', value));\n\t}\n}\n\nexport function assertIterable<T = unknown>(value: unknown, message?: string): asserts value is Iterable<T> {\n\tif (!isIterable(value)) {\n\t\tthrow new TypeError(message ?? typeErrorMessage('Iterable', value));\n\t}\n}\n\nexport function assertMap<Key = unknown, Value = unknown>(value: unknown, message?: string): asserts value is Map<Key, Value> {\n\tif (!isMap(value)) {\n\t\tthrow new TypeError(message ?? typeErrorMessage('Map', value));\n\t}\n}\n\nexport function assertNan(value: unknown, message?: string): asserts value is number {\n\tif (!isNan(value)) {\n\t\tthrow new TypeError(message ?? typeErrorMessage('NaN', value));","sourceCodeStart":1677,"sourceCodeEnd":1713,"githubUrl":"https://github.com/sindresorhus/is/blob/7821031c66cdeb7256a0feb2d506535f9e84fcaf/source/index.ts#L1677-L1713","documentation":"Thrown by `assertInteger()` (source/index.ts:1693) when `Number.isInteger(value)` is false. Only actual number primitives with no fractional part pass — numeric strings, NaN, Infinity, floats, and BigInt all fail. The library asserts this before code that does indexing, counting, or bit math on the value.","triggerScenarios":"Calling `assertInteger()` with a numeric string ('42'), a float (3.5), NaN or Infinity from a failed calculation, a BigInt (42n), or undefined/null from a missing field.","commonSituations":"Values from `process.env`, CLI args, query strings, and form inputs are strings and are never coerced; division or parse results producing floats or NaN; JSON fields typed loosely. Note `Number.isInteger(5.0)` is true but `parseInt` leftovers like '5px' become NaN via `Number()`.","solutions":["Convert string input explicitly before asserting: `Number.parseInt(raw, 10)` or `Number(raw)`, then assert.","Round intentional floats with `Math.trunc`/`Math.round` if a whole number is the real requirement.","Guard upstream computation against NaN/Infinity (e.g. division by zero) instead of letting it reach the assert.","Use `assertSafeInteger()` if the value must also be within Number.MAX_SAFE_INTEGER."],"exampleFix":"// before\nconst port = process.env.PORT;\nassertInteger(port); // throws — it's a string\n// after\nconst port = Number.parseInt(process.env.PORT ?? '3000', 10);\nassertInteger(port);","handlingStrategy":"validation","validationCode":"if (typeof value !== 'number' || !Number.isSafeInteger(value)) {\n  throw new TypeError(`Expected integer, got ${value}`);\n}","typeGuard":"const isInteger = (v: unknown): v is number => typeof v === 'number' && Number.isInteger(v);","tryCatchPattern":null,"preventionTips":["Parse user/string input with Number.parseInt and verify with Number.isInteger before passing on","Beware floating-point arithmetic producing 0.30000000000000004-style values — round explicitly if an integer is intended","Remember NaN, Infinity, and numeric strings all fail the integer check; validate at the trust boundary","Per this repo's CLAUDE.md, prefer branded guard types so the false branch doesn't narrow number to never"],"tags":["number","validation","type-assertion"],"analyzedSha":"7821031c66cdeb7256a0feb2d506535f9e84fcaf","analyzedAt":"2026-07-31T18:34:06.268Z","schemaVersion":2}