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

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

    let result: number[][] = [];
    let start = intervals[0][0];
    let end = intervals[0][1];

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

        if (current[0] <= end && end < current[1]) {
            // Merging current interval with previous
            end = Math.max(end, current[1]);
        } else if (start === end) {
            // Start and end are the same for a single point, so do nothing
        } else {
            result.push([start, end]);
            start = current[0];
            end = current[1];
        }
    }

    // Add the last interval if necessary
    if (start !== end) {
        result.push([start, end]);
    }

    return result;
}
```