As someone who's written at least as much code in dynamically typed languages (Lisp, Clojure, Python) as static, I find this question interesting because I really don't know how we know what types to pass. I think a big part is naming and following conventions. But honestly, somehow, I don't think I've ever had problems figuring out or passing the wrong types to anything.