p.s. The above observation explains what I like about TypeScript, hated about Java, and liked about C++ "back in the day."
A good type system is a tool we can use to manage things like "what is the set of legal values for this parameter," or, "who can and who cannot modify this object."
You _can_ just document the types to get the compiler to compile. But you can also refactor them to remove complexity. That is a powerful argument for not just using types, but embracing type-first thinking.
👇🏽