{"id":"75aa67b4a8d489a2","repo":"sindresorhus/is","slug":"expected-value-which-is-even-integer-received-v","errorCode":null,"errorMessage":"Expected value which is `even integer`, received value of type `${is(value)}`.","messagePattern":"Expected value which is `even integer`, received value of type `(.+?)`\\.","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"source/index.ts","lineNumber":1604,"sourceCode":"\t\tthrow new TypeError(message ?? typeErrorMessage('empty string or whitespace', value));\n\t}\n}\n\nexport function assertEnumCase<T = unknown>(value: unknown, targetEnum: T, message?: string): asserts value is T[keyof T] {\n\tif (!isEnumCase(value, targetEnum)) {\n\t\tthrow new TypeError(message ?? typeErrorMessage('EnumCase', value));\n\t}\n}\n\nexport function assertError(value: unknown, message?: string): asserts value is Error {\n\tif (!isError(value)) {\n\t\tthrow new TypeError(message ?? typeErrorMessage('Error', value));\n\t}\n}\n\nexport function assertEvenInteger(value: number, message?: string): asserts value is number {\n\tif (!isEvenInteger(value)) {\n\t\tthrow new TypeError(message ?? typeErrorMessage('even integer', value));\n\t}\n}\n\nexport function assertFalsy(value: unknown, message?: string): asserts value is Falsy {\n\tif (!isFalsy(value)) {\n\t\tthrow new TypeError(message ?? typeErrorMessage('falsy', value));\n\t}\n}\n\nexport function assertFiniteNumber(value: unknown, message?: string): asserts value is number {\n\tif (!isFiniteNumber(value)) {\n\t\tthrow new TypeError(message ?? typeErrorMessage('finite number', value));\n\t}\n}\n\nexport function assertFloat32Array(value: unknown, message?: string): asserts value is Float32Array {\n\tif (!isFloat32Array(value)) {\n\t\tthrow new TypeError(message ?? typeErrorMessage('Float32Array', value));","sourceCodeStart":1586,"sourceCodeEnd":1622,"githubUrl":"https://github.com/sindresorhus/is/blob/7821031c66cdeb7256a0feb2d506535f9e84fcaf/source/index.ts#L1586-L1622","documentation":"Thrown by `assertEvenInteger` (source/index.ts:1602) when the number is not an even integer. The parameter is already typed `number`, so this is a runtime value check: the value must satisfy `Number.isInteger` and be divisible by 2. Odd integers, floats, NaN, and Infinity all fail.","triggerScenarios":"Calling `assert.evenInteger(n)` with an odd integer, a float like `2.5`, `NaN`, or `Infinity` — e.g. results of division that don't land on an even integer.","commonSituations":"Buffer/byte-pair length checks (UTF-16, stereo audio samples, hex strings) where an odd length indicates truncated data; grid/pagination math producing floats after division; `parseInt` on malformed input yielding NaN.","solutions":["Trace where the odd/fractional value originates — often a division or off-by-one; fix the producer rather than the check","If halving is intended, use `Math.trunc`/`Math.floor` deliberately and assert afterward","Validate parsed numeric input for NaN before this assertion","If odd values are actually acceptable, use `assert.integer(n)` instead"],"exampleFix":"// before\nassert.evenInteger(bytes.length / 3); // may be fractional/odd\n// after\nassert.evenInteger(bytes.length); // validate the raw length is even first","handlingStrategy":"validation","validationCode":"if (Number.isInteger(value) && value % 2 === 0) {\n  assert.evenInteger(value);\n}","typeGuard":"function isEvenInteger(value: unknown): value is number {\n  return typeof value === 'number' && Number.isInteger(value) && value % 2 === 0;\n}","tryCatchPattern":"try {\n  assert.evenInteger(value);\n} catch (error) {\n  if (error instanceof TypeError) {\n    // not a number, not an integer, or odd — round or reject explicitly\n  } else throw error;\n}","preventionTips":["Check Number.isInteger first — floats like 2.0 pass but 2.5 fails before parity even matters","Values parsed from strings ('4') are not numbers; convert with Number() and validate before asserting","Beware NaN and Infinity — they are numbers but not integers"],"tags":["type-assertion","runtime-validation","number","integer"],"analyzedSha":"7821031c66cdeb7256a0feb2d506535f9e84fcaf","analyzedAt":"2026-07-31T18:34:06.268Z","schemaVersion":2}