Type checks are proofs across all inputs. Tests are proofs across a given set of inputs. They are complimentary. If you want really robust code, use both.
I've generally found the complement to be true as well: once you have decent type modeling, tests don't find very much, if anything. I've primarily only seen modeling done well in Scala though.