Helping detect errors early
Serving as documentation
Separating data from behavior
Eliminating entire categories of bugs (e.g. Type errors at run time, null exceptions, etc)
Allowing us to refactor with greater confidence
Serving as a domain modeling tool
…as well as some tradeoffs like verbosity, upfront investment to learn, and more.