```ts
export function runThermostat(start: number, low: number, high: number, power: number, drifts: number[]): { temp: number; heated: number; switches: number; coldest: number } {
  if (!Number.isInteger(start) || !Number.isInteger(low) || !Number.isInteger(high)) {
    throw new Error('Start, low, and high must be integers');
  }
  if (low >= high) {
    throw new Error('Low must be strictly below high');
  }
  if (!Number.isInteger(power) || power <= 0) {
    throw new Error('Power must be a positive integer');
  }
  if (!Array.isArray(drifts)) {
    throw new Error('Drifts must be an array');
  }

  let temp = start;
  let heated = 0;
  let switches = 0;
  let coldest = start;

  for (const drift of drifts) {
    if (!Number.isInteger(drift)) {
      throw new Error('Drift must be an integer');
    }
    const heaterOn = temp < low || temp >= high;
    const nextTemp = temp + drift + (heaterOn ? power : 0);
    coldest = Math.min(coldest, temp, nextTemp);
    if (heated > 0 && !heaterOn) switches++;
    if (!heated && heaterOn) switches++;
    heated = heaterOn ? 1 : 0;
    temp = nextTemp;
  }

  return { temp, heated, switches, coldest };
}
```