```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.");
    if (!drifts.every(Number.isInteger)) throw new Error("All drift values must be integers.");

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

    for (const drift of drifts) {
        if (temp < low && !heated) {
            heated = true;
            switches++;
        } else if (temp >= high) {
            heated = false;
            switches++;
        }
        temp += drift + (heated ? power : 0);
        coldest = Math.min(coldest, temp);
    }

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