```ts
export function mergeIntervals(intervals: number[][]): number[][] {
    if (intervals.length === 0) return [];

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

    const merged: number[][] = [];
    let currentInterval = sortedIntervals[0];

    for (let i = 1; i < sortedIntervals.length; i++) {
        if (currentInterval[1] >= sortedIntervals[i][0]) {
            currentInterval[1] = Math.max(currentInterval[1], sortedIntervals[i][1]);
        } else {
            merged.push([...currentInterval]);
            currentInterval = sortedIntervals[i];
        }
    }

    merged.push([...currentInterval]);
    return merged;
}
```