```ts
export function pluralNoun(word: string): string {
  if (typeof word !== 'string' || !/^[a-z]+$/.test(word)) {
    throw new Error('Invalid input');
  }

  const irregulars = new Map([
    ['child', 'children'],
    ['person', 'people'],
    ['foot', 'feet'],
    ['mouse', 'mice'],
    ['sheep', 'sheep']
  ]);

  if (irregulars.has(word)) {
    return irregulars.get(word)!;
  }

  if (/s|x|z|ch|sh$/.test(word)) {
    return word + 'es';
  }

  if (/y$/.test(word) && !/^[aeiou]/.test(word[word.length - 2])) {
    return word.slice(0, -1) + 'ies';
  }

  if (/fe$/.test(word)) {
    return word.slice(0, -2) + 'ves';
  }

  if (/f$/.test(word)) {
    return word.slice(0, -1) + 'ves';
  }

  return word + 's';
}
```