```ts
export function combineFractions(parts: string[]): string {
  if (parts.length === 0) {
    throw new Error("Input list cannot be empty");
  }

  const gcd = (a: number, b: number): number => {
    while (b !== 0) {
      const temp = b;
      b = a % b;
      a = temp;
    }
    return a;
  };

  const parseFraction = (fraction: string): [number, number] => {
    const match = fraction.match(/^(-?\d+)\/(\d+)$/);
    if (!match) {
      throw new Error("Invalid fraction format");
    }
    const numerator = parseInt(match[1], 10);
    const denominator = parseInt(match[2], 10);

    if (denominator === 0) {
      throw new Error("Denominator cannot be zero");
    }

    return [numerator, denominator];
  };

  const lcm = (a: number, b: number): number => {
    return Math.abs(a * b) / gcd(a, b);
  };

  let totalNumerator = 0;
  let commonDenominator = 1;

  for (const part of parts) {
    const [numerator, denominator] = parseFraction(part);

    if (denominator < 0) {
      throw new Error("Denominator cannot be negative");
    }

    commonDenominator = lcm(commonDenominator, denominator);
    totalNumerator += numerator * (commonDenominator / denominator);
  }

  const commonGcd = gcd(totalNumerator, commonDenominator);
  totalNumerator /= commonGcd;
  commonDenominator /= commonGcd;

  return `${totalNumerator}/${commonDenominator}`;
}
```