I use typescript 🙂 . I prefer statically typed programming languages. You basically trade runtime errors for compile time errors.
I found that I was testing and documenting the type and shape of function parameters, returns, and objects that get passed around anyway with jsdoc, so for me it made sense to go just a little further and declare those types and shapes in the code. Now the type/shape documentation doesn't drift away from the code 🙂