Tremendously useful. I use TypeScript, and it is stellar.
I don't understand why people hate on static typing. Honestly I think it's because they're too stubborn to learn. For large projects, static typing is indispensable. And for a language like TypeScript, you still retain all of the flexibility of a dynamically typed language if you need to go so fast that including types is burdensome.
I program in Haskell. Haskell has a strong static type system. I'll present an answer from a subjective point of view. See this Software Engineering StackExchange answer for a more technically detailed answer.
Open and Closed. Sure, this is like an enum in C, but things like Open == 0 don't make sense in Haskell.Maybe String, indicating that the String may not be found and will return Nothing in that case. He won't return a garbage value or -1 like C programmers.Finally, this is not something about Haskell in particular, but as a mathematics student interested in logic, I enjoy the connection between proofs as programs and types as propositions. This is the basis for proof assistants such as Coq.
I find that the dynamic type stuff creates errors at times so I prefer typing. I don't mind dynamic typing for small tools and utilities but for serious code in mission-critical systems, cryptography, etc... I see no reason to be using dynamic typing.
Check this out: lists.linuxfoundation.org/pipermail/bitcoin-dev/2…
Nuff said.
Mark
Type systems (strong & static) are the best!
I used to be into dynamic languages, and they still have their place.
But for a huge, dozens-of-people project, catching an error at compile time saves hours or even days compared to catching it at runtime. Especially if maintenance overtakes new development.
So use a language with a proper type system, and use it properly!
There's a lot more like lifetimes or dependent types, but this is not a book (and I'm still learning myself).