```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[][] = [sortedIntervals[0]];

    for (let i = 1; i < sortedIntervals.length; i++) {
        const current = sortedIntervals[i];
        const lastMerged = merged[merged.length - 1];

        if (current[0] > lastMerged[1]) {
            // No overlap
            merged.push(current);
        } else {
            // Overlap, merge
            lastMerged[1] = Math.max(lastMerged[1], current[1]);
        }
    }

    return merged;
}
```