```ts
/**
 * Joins a list of names into a phrase according to Oxford English rules.
 * 
 * @param {string[]} names - The list of names to join.
 * @returns {string} - The joined phrase.
 */
export function oxfordJoin(names: string[]): string {
  if (names.length === 0) return '';

  let result = '';
  for (let i = 0; i < names.length; i++) {
    const name = names[i];
    result += name;

    if (i === names.length - 1 || i >= names.length - 2) continue;
    result += ' and ';
  }

  return result;
}
```