Alex, потому что если ты используешь оверлоад, то тип самой функции извне виден не будет, видно будет только то, что в оверлоаде, а в оверлоаде у тебя функция может принимать ЛИБО number, ЛИБО number[], но никак не number | number[], соответственно тс не может определить какой тип должен вернуться.