```ts
function parseCsvLine(line: string): string[] {
  const fields: string[] = [];
  let inString = false;
  let currentField = '';

  for (let i = 0; i < line.length; i++) {
    if (inString) {
      if (line[i] === '"') {
        if (i + 1 < line.length && line[i + 1] !== '"') {
          currentField += '"';
          i++;
        } else if (i > 0 && line[i - 1] === '"') {
          inString = false;
        }
      } else {
        currentField += line[i];
      }
    } else {
      if (line[i] === '"' &&(line[i + 1] === null || line[i + 1] === undefined)) {
        throw new Error(`Unfinished quotation at position ${i}`);
      } else if (line[i] !== '\r' && line[i] !== '\n') {
        currentField += line[i];
        if (currentField.match(/,+/)) {
          fields.push(currentField.trim());
          currentField = '';
        }
      }
    }
  }

  // If this line contains multiple unquoted values separated by commas,
  // the last value won't be pushed in. Hence checking here.
  const lastChar = currentField[currentField.length - 1];
  if (lastChar && !currentField.includes(',') && lastChar !== '"') {
    fields.push(currentField);
  }

  return fields.map((f, i) => f.trim());
}

// EXAMPLE USAGE
parseCsvLine('""');
// []

parseCsvLine('a,b,c');
// ["a", "b", "c"]

parseCsvLine('"a,b"c/d,g,h,i,j"');
// ["a,b,c/", "d,g,h,i,j"]
```