I don’t like the current landscape of python type checkers.
I figure that Python itself is at the bottom of this. It simply wasn’t designed for static types. Mypy is still of some use but if you want a statically typed language, trying to graft a type system onto a unityped language hasn’t worked out well as far as I know. See also: the Erlang dialyzer, Typed Racket, and whatever that Clojure extension is called. Even Scala has its problems because the JVM has its own type system that isn’t that great a fit for Scala.
Also, why Rust as the implementation language? Just for speed? It seems a shame to not use Python/PyPy.
The idea is to develop keen instincts so your code comes out nice on the first try, without needing rewrites. To do that, you have to start out by rewriting a lot. You are after a fluency of style, which is somewhat independent from deep thinking. Compare being a profound musical composer who sweats blood over every note, with being a competent (not necessarily great) improviser who, given any request, can bang out something listenable immediately without too many bum notes, without thinking too hard.
Ideally you want both. Computer science education gives you the profound compositional knowledge. Improvisation needs lots and lots of practice at the basics. So code a lot. It makes everything else easier.