```ts
export function carveShift(start: number, end: number, span: number, rest: number, least: number): number[][] {
    if (
        !Number.isInteger(start) ||
        !Number.isInteger(end) ||
        !Number.isInteger(span) ||
        !Number.isInteger(rest) ||
        !Number.isInteger(least) ||
        start >= end ||
        span < 1 ||
        rest < 1 ||
        least < 1 || 
        least > span
    ) {
        throw new Error("Invalid arguments.");
    }

    const stretches: number[][] = [];
    let currentStart = start;

    while (currentStart < end) {
        const stretchEnd = Math.min(currentStart + span, end);
        if (stretchEnd - currentStart >= least) {
            stretches.push([currentStart, stretchEnd]);
            currentStart += rest;
        } else {
            break;
        }
    }

    return stretches;
}
```