```ts
/**
 * Joins a list of names into one phrase using Oxford comma style.
 * @param names - Array of names to join.
 * @returns A string with the names joined according to Oxford comma rules.
 */
export function oxfordJoin(names: string[]): string {
  if (names.length === 0) return '';
  if (names.length === 1) return names[0];
  if (names.length === 2) return `${names[0]} and ${names[1]}`;
  
  const last = names.pop();
  return `${names.join(', ')}, and ${last}`;
}
```