When it comes to dynamic and static typing there are big discussions and many opinions all around. I’ve collected following thoughts about this problem. Each one of it is questionable because programming is not black & white world. This is what is said in general (the truth is probably somewhere in-between):
Static typing:
Dynamic typing:
In reality it also depends on other aspects such as skills, preference of development team or project requirements itself. The truth is that big and reliable software was built in both languages with strict type checker like Java, C#, C++ as well as in dynamic languages like Python, JavaScript or Groovy.
What really matters is if you test your code. Type checker is the first line of tests which will fail fast in case of typos or even serious type problems. On the other hand the effort spent in satisfying type checker and working in more verbose environment can be invested in better unit tests. In any case you should test your units and business logic, if you don’t even type checker won’t save your application.
Choosing one or the other approach is hard and often opinionated decision. There are strong advocates of both approaches however there is no clear winner.