- Painless refactoring. I change field "foo.bar" into "foo.quux" and the same field changes everywhere else in the (huge) codebase. Or I change the field name in the type declaration and immediately see what's broken.
- Integrated documentation. I see "foo", I see it's type, I see what can I do with it (if it's OO-like).