```ts
export function splitFieldPath(path: string): (string | number)[] {
  if (typeof path !== 'string') {
    throw new Error('Input must be a string');
  }

  if (!path || /^\s*\.|\.\s*$/.test(path)) {
    throw new Error('Invalid field path format');
  }

  const parts: (string | number)[] = [];
  const regex = /[a-zA-Z_][a-zA-Z0-9_]*|\[\d+\]/g;
  let match;

  while ((match = regex.exec(path)) !== null) {
    const part = match[0];
    if (part.startsWith('[')) {
      const index = parseInt(part.slice(1, -1), 10);
      if (isNaN(index) || index < 0 || (index.toString() !== part.slice(1, -1))) {
        throw new Error('Invalid index format');
      }
      parts.push(index);
    } else {
      parts.push(part);
    }
  }

  if (regex.lastIndex !== path.length) {
    throw new Error('Unterminated bracket or invalid character found');
  }

  return parts;
}
```