I didn't get into this in the blog post, but we use io-ts at Pilot, and we generate most of the codecs based on the type annotations on the Python side. It works reasonably well, although I think the io-ts syntax confuses people who are new to TypeScript.
You might be interested in the PEP introducing structural subtyping to Python: https://www.python.org/dev/peps/pep-0544/ - there, they use "structural subtyping" and "static duck typing" as synonymous.