```ts
export function thawRow(row: string, steps: number): string {
  if (typeof row !== 'string' || !row) throw new Error('Invalid input: row must be a non-empty string');
  if (!/^[#.]+$/.test(row)) throw new Error('Invalid input: row can only contain "#" and "."');
  if (!Number.isInteger(steps) || steps < 0) throw new Error('Invalid input: steps must be a non-negative integer');

  const rows = Array.from({ length: steps }, () => row);

  for (let i = 0; i < steps; i++) {
    let newRow = '';
    for (let j = 0; j < row.length; j++) {
      if (
        (j === 0 && row[j] === '#') ||
        (j === row.length - 1 && row[j] === '#') ||
        (row[j] === '#' && row[j - 1] === '.' && row[j + 1] === '.')
      ) {
        newRow += '.';
      } else {
        newRow += row[j];
      }
    }
    rows[i] = newRow;
  }

  return rows[steps - 1];
}
```