```ts
export function mergeIntervals(intervals: number[][]): number[][] {
  if (!Array.isArray(intervals) || intervals.some(isNaN))
    throw new Error("Invalid input");

  const sortedIntervals = intervals.sort((a, b) => a[0] - b[0]);
  return sortedIntervals.reduce((acc, interval, index) => {
    const last = acc.length > 0 ? acc[acc.length - 1] : undefined;

    if (last && interval[0] <= last[1]) {
      acc[acc.length - 1] = [last[0], Math.max(last[1], interval[1])];
    } else {
      acc.push(interval);
    }

    return acc;
  }, [] as number[][]);
}
```