Static Typing
A language is statically typed if the type of a variable is known at compile time.
The main advantage here is that all kinds of checking and catching potential errors by compiler and it allows many bugs to be caught early in the development cycle.
In a type-safe language, static type checking can also be thought of as an optimisation — if a compiler can prove that a program is well-typed, then it does not need to emit dynamic safety checks, allowing the resulting compiled binary to run faster.
This is in contrast to Dynamic Typing where the type of a variable is interpreted at runtime.
One of the chief complaints with static typing is the need to explicitly specify types for everything.
Dislikes
The most common arguments against static types are that they make programs too verbose, prevent programmers from expressing themselves as they wish, and make impossible certain patterns of dynamic modifications of software systems.
In Scala, the verbosity is avoided through type inference.