Для меня статическая типизация - это линтер на стероидах.
Что мы делаем, когда описываем типы в нашем приложении? Мы строим некоторую модель, систему ограничений, систему правил. А линтер проверяет, что наш код соответствует этим правилам.
Описывая типы, мы думаем предметной области. В каких состояниях может быть система. Мы не касаемся реализации.
Это почти TTD. Описываем, что мы хотим получить, а потом реализовываем.
И наш “компилятор” проверит, что реализация соответствует идеи.
Но в отличии от тестов, которые проверяют что-то точечно, типы проверяет все кейсы.
Пример. Мы описали результат вызова апи как объектик {ok: boolean, ...}
Можно написать логику и тест только на положительный кейс, забыть про ошибки, и система не ударит тебя по рукам.
А типы зафорсят тебя описать все ветки.
Если чуток подумать, то можно сделать все совсем красиво. Подробнее в докладе Артёма (@rage_monk) и Дмитрия (@DmitryMakhnev) с #KharkivJS youtube.com/watch?v=S0cCjb…
