```ts
// solution.ts

export function mergeIntervals(intervals: number[][]): number[][] {
    if (intervals.some(([start, end]) => start > end)) {
        throw new Error("Invalid interval: start must not be greater than end");
    }

    // Sort intervals by their starting points
    intervals.sort((a, b) => a[0] - b[0]);

    const mergedIntervals = [];
    let currentInterval = intervals[0];

    for (let i = 1; i < intervals.length; i++) {
        const nextInterval = intervals[i];

        // Check if the current interval overlaps with the next one
        if (currentInterval[1] >= nextInterval[0]) {
            // Merge overlapping intervals
            currentInterval[1] = Math.max(currentInterval[1], nextInterval[1]);
        } else {
            // No overlap, add the current interval to the merged list
            mergedIntervals.push([...currentInterval]);
            currentInterval = nextInterval;
        }
    }

    // Add the last merged interval if not already added
    mergedIntervals.push([...currentInterval]);

    return mergedIntervals;
}
```