The pros and cons of types should always be discussed in the context of type systems. Types exist in a type system.
There are many, many things that can be expressed with types... depending on the type system. In Haskell, when you look at a function type, you instantly know whether it returns an optional value (a Maybe), or if it has side effects (IO), etc. You can also tell how general the function is, by how abstract its parameters are.
An example of something that becomes possible with a rich type system: https://hoogle.haskell.org/