See also this recent discussion about exactly this topic: Live type checkers to load typing signatures from current module's stub
I personally feel that splitting off type information into a separate file for readability only makes the problem worse, hiding the problem doesn’t get rid of it. It does improve the situation for users that don’t care about typing, so I have sympathy for that particular use-case, even if it comes at a small additional cost for the people that do care about it.
There are however some proposals to reduce the verbosity of overloads, which seems like a better place to invest our efforts, rather than trying to unify type information between stubs and implementation. There are a lot of subtleties that make this a non-trivial exercise, since stubs were never designed to be used that way.