```ts
export function quarterSpin(grid: number[][], turns: number): number[][] {
  turns = turns % 4;
  if (turns === 0) return grid;

  const rows = grid.length;
  const cols = grid[0].length;
  const newGrid = Array.from({ length: cols }, () => new Array(rows).fill(0));

  for (let r = 0; r < rows; r++) {
    for (let c = 0; c < cols; c++) {
      if (turns === 1) {
        newGrid[c][rows - r - 1] = grid[r][c];
      } else if (turns === 2) {
        newGrid[cols - c - 1][r] = grid[r][c];
      } else if (turns === 3) {
        newGrid[r][c] = grid[cols - c - 1][rows - r - 1];
      }
    }
  }

  return newGrid;
}
```