2. More readable code.
3. More maintainable code.
4. More efficient generated code.
Types help make (some) invalid states unrepresentable, though the type systems could always be better and some data can only be checked at runtime.
But you can focus your test effort on checking those logic conditions. In addition it makes teamwork far easier.
I'd compare it to the benefits of rust over plain C. Yes you can write safe code in C with a lot of discipline and being 100% focused all the time, or you can leverage tools to let you catch your mistakes and free mental cycles for the actual problem at hand.
- Integrated documentation. I see "foo", I see it's type, I see what can I do with it (if it's OO-like).
It can fulfill certain compulsive needs of certain personality types that like to be comprehensive (think compulsive note takers, list makers).
No harm done, everyone has their quirks.