```ts
/**
 * Splits total takings among partners based on their weights.
 * @param total - The total takings in whole cents.
 * @param weights - An array of positive whole numbers representing each partner's share weight.
 * @returns An array of integers representing the parts each partner receives, in order.
 */
export function splitCents(total: number, weights: number[]): number[] {
  if (!Number.isInteger(total) || total < 0) {
    throw new Error("Total must be a non-negative integer.");
  }
  if (!Array.isArray(weights) || weights.length === 0) {
    throw new Error("Weights must be a non-empty array of positive whole numbers.");
  }
  for (const weight of weights) {
    if (!Number.isInteger(weight) || weight <= 0) {
      throw new Error("Weights must be a non-empty array of positive whole numbers.");
    }
  }

  const sumOfWeights = weights.reduce((acc, curr) => acc + curr, 0);
  const basePart = Math.floor(total * (1 / sumOfWeights));
  const remainder = total - basePart * sumOfWeights;
  const parts = weights.map(() => basePart);

  for (let i = 0; i < remainder; i++) {
    parts[i]++;
  }

  return parts;
}
```