В JavaScript слабая динамическая типизация. Это означает две вещи:
- Любая переменная может произвольно менять свой тип во время выполнения программы.
- При операциях с переменными разных типов они будут автоматически приведены к одному типу.
Эти свойства языка часто мешают создавать большие надёжные приложения. Поэтому появились решения, которые расширяют язык, добавляя в него строгую статическую типизацию. «Строгая» означает запрет автоматического приведения типов, «статическая» значит, что переменные не меняют свой тип. Самое популярное решение в этой области TypeScript. Другие, менее популярные Flow, Hegel.