Я знаю, что просто не могу проверить, но отслеживание ошибок времени выполнения JavaScript может быть кошмаром, поскольку они не всегда происходят там, где ошибка действительно возникает в коде.
Действительно, типичная практика - не проверять. И, да, это означает, что вы получите ошибки javascript, о которых сообщается в другом месте, из реальной проблемы. Но на практике я не считаю это большой проблемой.
Работая в javascript, я постоянно проверяю, что я пишу. В большинстве кода у меня есть модульные тесты, которые запускаются автоматически каждый раз, когда я сохраняю свой редактор. Когда что-то неожиданно идет не так, я знаю почти сразу. У меня есть очень маленькая область кода, в которой я, возможно, допустил ошибку, так как почти всегда последнее, к чему я прикасался, имеет ошибку.
Когда я получаю ошибку во время выполнения, я, по крайней мере, получаю трассировку стека, а в случае ошибки в браузере у меня есть возможность перейти на любой уровень трассировки стека и проверить переменные. Как правило, легко отследить, откуда взялась плохая ценность, и таким образом отследить ее до исходной проблемы.
Если вы похожи на меня, когда я писал в основном на статически типизированных языках, перед тестированием я писал большие блоки кода, и у меня не было практики отследить, откуда оно взято. Программирование на языке, таком как javascript, отличается, вы должны использовать разные навыки. Я подозреваю, что подобное программирование кажется намного сложнее, потому что это не те навыки, которые вы развили, работая на других языках, таких как C #.
Сказав это, я думаю, что многое можно сказать о явных типах. Они отлично подходят для документирования и раннего обнаружения ошибок. Я думаю, что в будущем мы увидим все большее распространение таких вещей, как Flow и Typescript, которые добавят статическую проверку типов в javascript.