Я не говорю, что типы не нужны и что их можно заменить тестами.
Я лишь хотел сказать, что у статической проверки типов не так уж много преимуществ перед динамической.
И ты можешь выбрать любой язык, всё равно придётся решить примерно одинаковое количество проблем)
А тот тут есть максималисты, у которых гавно из ушей лезет, чтобы они немного понимали что мир это не чёрное и белое)
некоторые проблемы решить нельзя в данный момент.
например, проверка входных данных между компонентами/модулями или иными логическими кусками ПО. динаимка в это не могёт в полной мере. да, у динамических яп есть схемы, но ни в одной популярной динаимики нет схемы, которая могла бы разрулить сигнатуры функций. а ещё схемы - это удар по перфомансу, настолько сильный, что их частое использование просто делает программу негодной для чего либо крмое скриптования местчекового