- offers better maintainability and discoverability of existing code bases
- provides reasonable type safety, which frees us from writing a huge chunk of unit tests and mitigates a large set of problems that are caught in compilation
- affords a new level of expressiveness via types
Nothing is without trade offs; we are aware of, and accept that:
- fighting the compiler can be frustrating
- it adds to the already large list of skills a web developer has to learn
- it adds another piece to the already large set of tools necessary to get code from development to production
If one has to use typing, why not use a proper typed and compiled language such as go or rust for the backend?
Regardless, I could see us to use Go, if we found performance issues we can't easily resolve in NodeJS. That hasn't happened yet. Until then, NodeJS is the more approachable language. Rust, though I personally love and use it in my projects, would require us to specifically hire for that, as the learning curve is quite steep. Its web ecosystem is OK by now (see https://www.arewewebyet.org/), but in my opinion, it is still no where near that of the other web languages.
In summary: TypeScript is the easy choice, Go would be practical but is not necessary, Rust is an innovation we don't want to pay the price for.