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);