```ts
/**
 * Validates each yield and returns the maximum harvest without consecutive days.
 */
export function bestHarvest(yields: number[]): number {
  if (!Array.isArray(yields)) {
    throw new Error("Yields must be an array");
  }

  for (const yield_ of yields) {
    if (!Number.isInteger(yield_)) {
      throw new Error("Each yield must be an integer");
    }
    if (yield_ < 0) {
      throw new Error("Yield cannot be negative");
    }
  }

  if (yields.length === 0) {
    return 0;
  }

  const n = yields.length;
  const dp = new Array(n);

  dp[0] = yields[0];
  dp[1] = Math.max(yields[0], yields[1]);

  for (let i = 2; i < n; i++) {
    dp[i] = Math.max(dp[i - 1], dp[i - 2] + yields[i]);
  }

  return dp[n - 1];
}
```