Pyre has optional strict mode typing if you want to enforce it. It also is more sound than mypy.
https://github.com/google/pytype https://github.com/google/pytype https://github.com/microsoft/pyright
By that I mean if you do
foo = {"a": 2}
foo["b"] = 3
you will get a type error because the inferred type of foo includes knowledge of the keys. But well written code doesn't use dicts when you know which keys are going to be present - you use a dataclass.I guess you could argue most Python is not well written, but then most Python developers are too amateur to use Pyright anyway.