If we're getting that pedantic, the quote was "they passed unit tests". If the bug passed a 0-size set of unit tests, then it didn't actually pass any unit tests.
Meh, that's an odd statement since it unifies the classes of bugs which pass varying qualities of (1) and (2). Certainly, "what's true of all bugs (seen in production) is that they passed the unit tests and type checkers levied against them" is nearly tautological, but leaving out those classifiers makes it into a much less meaningful statement.
Which tells us something about the nature of the bugs we will find in our programs.
The type-checker prevents certain classes of bugs, inconsistencies in types, lots of silly typos and mistakes. But it doesn't fix errors in our logic or algorithms. The type-checker doesn't know you should have added instead of multiplied, nor does it fix conversion errors at the borders of our programs where we, say, write a Haskell data structure into a JSON file.
Good thing type checkers stop many bugs from happening in the first place. I do agree with him that conceptually simple dynamic (Clojure) > complex typed (Java).
Strongly typed languages, and unit testing, do prevent or detect many kinds of bugs less expensively than the alternatives. That is why they're worth using.
Similarly, not all diseases are prevented by vaccination, but that's not considered a good argument to stop vaccinating people against those diseases that are prevented by vaccination.
I agree with you, but you're being argumentative. No one here is saying that we should stop unit tests because they can't find all the bugs.
Instead, the focus should be on what else we can do to improve the bug detection rate. This is an area that needs further research (and I would start with the observation that the quality of the unit test varies dramatically depending on who writes them).
Yes, this was the point of his quote. Strange how this point was missed in the other comments. Of course, Hickey is aware that not all languages are strongly typed.
There's always at least one type checker, the one running in your head. Some languages provide another type checker to help offload some of this cognitive load.