```ts
export function mergeIntervals(intervals: number[][]): number[][] {
    // Check if intervals array is empty or contains a single interval
    if (!intervals || intervals.length < 2) return [...intervals];

    // Sort the intervals by start time
    const sortedIntervals = [...intervals].sort((a, b) => a[0] - b[0]);

    let merged: number[][] = [];
    for (let interval of sortedIntervals) {
        // If the array of merged intervals is empty or if the current 
        // interval does not overlap with the previous, append it.
        if(!merged.length || merged[merged.length - 1][1] < interval[0]){
            merged.push([...interval]);
        } else {
            // There is overlap, so we merge the current and previous intervals.
            merged[merged.length - 1][1] = Math.max(merged[merged.length - 1][1], interval[1]);
        }
    }

    return merged;
};
```