```typescript
function pluralOf(noun: string): string {
    if (typeof noun !== 'string' || noun === '' || noun === null) {
        throw new Error('Invalid input: Expected a non-empty, non-null string.');
    }

    const suffixes = { s: '', x: '', ch: '', sh: 'es' };
    if (suffixes[noun.slice(-1)]) {
        return noun + suffixes[noun.slice(-1)];
    } else if (/[aeiou]/i.test(noun.slice(-2)) && !/[bcdfghjklmnpqrstvwxyz]/i.test(noun.slice(-3))) {
        return noun + 'ies';
    } else {
        return noun + 's';
    }
}
```