```ts
export function mergeIntervals(intervals: number[][]): number[][] {
    if (intervals.some(([start, end]) => start > end)) {
        throw new Error('Interval start cannot be greater than interval end');
    }

    const sortedIntervals = intervals.slice().sort((a, b) => a[0] - b[0]);
    const merged: number[][] = [];

    for (const [start, end] of sortedIntervals) {
        if (merged.length === 0 || merged[merged.length - 1][1] < start) {
            merged.push([start, end]);
        } else {
            merged[merged.length - 1][1] = Math.max(merged[merged.length - 1][1], end);
        }
    }

    return merged;
}
```