I really think the second one shouldn't raise a type error.
This is already invalid:
function foo1(arg1?: number, arg2: number) {}
In that case you have to use function foo1(arg1: number | undefined, arg2: number) {}
foo1(undefined,1);
But other than that what is the use case?