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

  // If no steps, return the row unchanged
  if (steps === 0) {
    return row;
  }

  // Simulate the thawing process for the specified number of steps
  for (let i = 0; i < steps; i++) {
    let newRow: string[] = [];
    for (let j = 0; j < row.length; j++) {
      if (
        (j === 0 && row[j] === '#') ||
        (j === row.length - 1 && row[j] === '#') ||
        (row[j] === '#' && (j > 0 && row[j - 1] === '.' || j < row.length - 1 && row[j + 1] === '.'))
      ) {
        newRow.push('.');
      } else {
        newRow.push(row[j]);
      }
    }
    row = newRow.join('');
  }

  return row;
}
```