Tradtionally there were two appraoches to writing code:
For compiled code, compilers and builds could be so slow one soon learned that it's best to know your language very well, spend time writing your programs/modules, spend much time inspecting what you have written, as if you wre a compiler, then submitting the job for compilation. My first high level language code was in Algol, a compilation took all night. Seriously, that was from submitting a stack of cards to the university computer operators to getting the printed listing back in the morning. With that turn round time one was very careful.
For interpreted code, we had BASIC, just hack it into the termoinal and run it. Instant feed back for errors. Terrible slow run time for significant programs.
This basic scheme of thing continues to this day with the likes of C++ and Rust vs JS, Python etc.
Except I find now that method 1) is broken. C++ and Rust are such complex languages that it is impossible to know that anything will compile first time, or second, or third... C++ because it is just a massive ball of complexity of syntax and semantics, Rust because as well as language complexity there is all the work of the borrow checker and type checking to contend with. (Mind you, that could be because my old brain is slow to handle it all now a days.)
Now a days for C++ and now Rust I have fallen into a rythm of making small changes, one line at a time, one function, one method. Or if there are more global changes do one of those at a time. With the help of Make for C++ and Cargo for Rust only the changed module is recompiled and turn around times are tolerable.
To get into this rhythm and achieve quick dev iteration cycles one needs to get organized. Keep modules small. Minimize dependencies between modules. All good software engineering practice anyway.
I find that this method works better for Rust than C++ as the error messages are much more helpful. It's the only way I can work in Rust as I am still very unfamiliar with it all.
Have your IDE setup properly. Having the IDE highlight problems before you get near the compiler is a boon.
Make use of "cargo check". It shakes out the syntax and other errors without spending too much time on actually trying to compile anything.
I find trying out new code/ideas in a separate small module as an experiment speeds things up greatly. When it's working nicely then adopt it into the main work.
When you get going like this dev iteration cycles can match those of JS and Python.
Don't forget, the Rust compiler is so fussy that your code is far more likely to work properly if you ever manage to get it to compile cleanly. So you are actually saving time you would otherwise be spending testing your JS properly after every little change.