```ts
/**
 * Computes the sum of elements in specified regions of a grid.
 *
 * @param {number[][]} grid - A non-empty 2D array of integers with uniform row lengths.
 * @param {number[][]} queries - A list of query rectangles, each defined as [top, left, bottom, right].
 * @returns {number[]} An array of sums corresponding to the queried regions.
 */
export function regionTotals(grid: number[][], queries: number[][]): number[] {
  const rows = grid.length;
  const cols = grid[0].length;

  // Validate grid
  if (rows === 0 || cols === 0) throw new Error('Grid must have at least one row and one column.');
  for (let i = 1; i < rows; ++i) {
    if (grid[i].length !== cols) throw new Error('All rows must have the same length.');
  }
  for (const row of grid) {
    for (const cell of row) {
      if (!Number.isInteger(cell)) throw new Error('Grid cells must be integers.');
    }
  }

  // Validate queries
  const results: number[] = [];
  for (const query of queries) {
    if (query.length !== 4) throw new Error('Each query must contain exactly four elements.');
    const [top, left, bottom, right] = query;
    if (!Number.isInteger(top) || !Number.isInteger(left) || !Number.isInteger(bottom) || !Number.isInteger(right)) {
      throw new Error('Query values must be integers.');
    }
    if (top >= bottom || left >= right) throw new Error('Query dimensions must be positive and non-zero.');
    if (top < 0 || top >= rows || bottom > rows || left < 0 || left >= cols || right > cols) {
      throw new Error('Query area must be within the grid bounds.');
    }

    // Calculate region sum
    let sum = 0;
    for (let i = top; i < bottom; ++i) {
      for (let j = left; j < right; ++j) {
        sum += grid[i][j];
      }
    }
    results.push(sum);
  }

  return results;
}
```