Note that duck-typing can still be a compile-time thing: it's basically what you'd get in C++ if you use auto and templates for everything.
The trade-off between compile-time and run-time checking depends in large part on the time needed to address the issue. It's not really black and white. People just don't want to wait forever for static verification - I think that's kind of why clang-static-analyzer isn't used as much as clang-tidy.