```ts
/**
 * Joins an array of names into a single phrase in Oxford English style.
 * Two names are joined by "and", three or more take a comma between every pair but the last,
 * which takes "and". One name stands alone and no names give empty text.
 *
 * @param {string[]} names - The array of names to join.
 * @returns {string} The joined phrase in Oxford English style.
 */
export function oxfordJoin(names: string[]): string {
  if (names.length === 0) return "";
  if (names.length === 1) return names[0];

  let result = `${names.slice(0, -1).join(", ")}`;
  if (result.length > 0) result += " and ";

  return result + names[names.length - 1];
}
```