```typescript
/**
 * Merges overlapping intervals into non-overlapping pairs.
 *
 * @param intervals - A list of [start, end] pairs representing intervals to be merged.
 * @returns The smallest list of non-overlapping pairs covering the same points.
 */
export function mergeIntervals(intervals: number[][]): number[][] {
    if (!intervals.length) {
        return [];
    }

    const merged = [
        ...intervals.map(interval => [interval[0], interval[1]]),
    ];

    // Sort by start and then end
    merged.sort((a, b) => a[0] - b[0] || a[1] - b[1]);

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

        if (prev[1] > current[0]) { // Start of next interval is greater than end of previous
            merged.splice(i, 1);
            i--;
        } else if (current[0] <= prev[1]) { // Intervals overlap
            merged[i - 1] = [prev[0], Math.max(prev[1], current[1])];
        }
    }

    return merged;
}
```