TS1345
An expression of type 'void' cannot be tested for truthiness.
Broken Code ❌
type PositiveNumber = number & { __brand: 'PositiveNumber' };
function divide(a: number, b: PositiveNumber) {
return a / b;
}
function assertPositiveNumber(x: unknown): asserts x is PositiveNumber {
if (typeof x === 'number' && x < 0) {
throw new Error('Input is a negative number');
}
}
if (assertPositiveNumber(10)) {
divide(100, 10);
}Solution:
This error occurs because the assertPositiveNumber function is an assertion function and does not return a value (its return type is void). You should call it directly to perform the assertion and then proceed with the divide function if no error is thrown.
Fixed Code ✔️
type PositiveNumber = number & { __brand: 'PositiveNumber' };
function divide(a: number, b: PositiveNumber) {
return a / b;
}
function assertPositiveNumber(x: unknown): asserts x is PositiveNumber {
if (typeof x !== 'number' || x <= 0) {
throw new Error('Input is not a positive number');
}
}
const num = 10;
assertPositiveNumber(num);
divide(100, num);