```python
from typing import List

def oxford_join(names: List[str]) -> str:
    if not names:
        return ""
    
    if len(names) == 1:
        return names[0]
    
    if len(names) == 2:
        return f"{names[0]} and {names[1]}"
    
    return ", ".join([f"{name} and" for name in names[:-1]]) + f", and {names[-1]}"
```