Зная тип переменной среда разработки может подсказать:
- можно ли присвоить ей результат функции
- можно ли её передать как аргумент функции
- к каким методам и свойствам можно обратиться
В некоторых языках, например Kotlin, система типов позволяет отслеживать null значения и обрабатывать их в коде.
Более того, в большинстве статически типизированных языков есть возможность вывода типа исходя из выражения. Т.е. можно писать тип только там, где это действительно необходимо. Отличие от JS в том, что типы все равно отслеживаются на этапе компиляции и нельзя присвоить переменной значение другого типа.
Запись вида
val a = 2 + 3
Эквивалентна записи
val a : Int = 2 + 3
Это приведет к ошибке:
val a = 2 + 3
a = "Hello"
Все это помогает переместить целые категории ошибок из времени исполнения в этап компиляции (Для IDE и вовсе этап написания кода)