```ts
function mergeIntervals(intervals: number[][]): number[][] {
  intervals.sort(([start1, _], [start2, _]): number => start1 - start2);
  const result: number[][] = [];

  for (let i = 0; i < intervals.length; i++) {
    if (!result.length || intervals[i][0] > result[result.length - 1][1]) {
      result.push(intervals[i]);
    } else {
      result[result.length - 1] = [result[result.length - 1][0], Math.max(result[result.length - 1][1], intervals[i][1])];
    }
  }

  return result;
}
```