I have seen little evidence that static typing is all that useful in a general purpose programming language.
Static typing means that the compiler knows the type of every value. This allows the compiler to produce faster code. In particular, it allows the compiler to avoid a layer of indirection through a pointer. By contrast, in traditional implementations of LISP, all variables except integers are represented as pointers: that is why LISP is (or is reputed to be) slow. Moreover, the type of the value (even integer values) is represented in the data, and must be checked. The more information the compiler has about typing, the more of those pointers and checks can be eliminated, thus the less code and less memory access is necessary to get data into a register. In the ideal case, the data is put into a register directly through the assembly produced by the compiler. That's going to happen all the time with C; it won't happen in a dynamically typed language unless a lot of work has gone into optimizations (meaning, generally, "whole program analysis") or the programmer specifies additional type information for the compiler.
So, the point of static typing is not to help you, the programmer; it is to help your compiler.