```ts
export function mergeIntervals(intervals: number[][]): number[][] {
  if (!Array.isArray(intervals) || intervals.some(pair => !Array.isArray(pair) || pair.length !== 2)) {
    throw new Error("Input must be an array of [start, end] pairs.");
  }

  return intervals
    .sort((a, b) => a[0] - b[0])
    .reduce((merged: number[][], current: number[]): number[][] => {
      const last = merged.length > 0 ? merged[merged.length - 1] : null;

      if (last && last[1] >= current[0]) {
        // Merge intervals
        merged[merged.length - 1][1] = Math.max(last[1], current[1]);
      } else {
        // Add new interval
        merged.push(current);
      }

      return merged;
    }, []);
}
```