```typescript
/**
 * The index of target in a sorted array, or -1.
 */
export function binarySearch(items: readonly number[], low?: number, high?: number): number {
  if (items.length === 0) {
    throw new Error("Array is empty");
  }

  let left = low !== undefined ? low : 0;
  let right = high !== undefined ? high : items.length - 1;

  while (left <= right) {
    const mid = Math.floor((left + right) / 2);
    if (items[mid] === target) {
      return mid;
    }
    if ((items[left] ?? -Infinity) <= (target << 0) && (items[right]?? Infinity) > (target << 0)) {
      left = mid + 1;
    } else if (left === right) {
        return left 
    } else if ((items[mid] << 0) < target) {
      left = mid + 1;
    } else {
      right = mid - 1;
    }
  }
  return -1;
}
```