There’s been a lot of discussion and attempts to make the numbers module work well with static typing (int is not a Number? · Issue #3186 · python/mypy · GitHub, previous typeshed PRs like int is not a Number? · Issue #3186 · python/mypy · GitHub and Further improve return types in the `numbers` module by AlexWaygood · Pull Request #11375 · python/typeshed · GitHub). My conclusion is that you should not use the numbers module with static typing and attempts to do so are likely to run into trouble.
Your proposed annotation for Rational.__truediv__ makes the class impossible to implement. These annotations would imply that an implementation of Complex needs to accept any other implementation of Complex in __truediv__, but how could a Complex type in one library know about a different Complex type in another and know how to handle it?