Completely agree with the conclusions. My personal experience is that TDD cuts the number of defects that sneak into production many fold. While it’s hard to master, the effort is worth it.
The only thing I struggle with using TDD is when I don’t have a clear idea of where I’m heading with the code. For example, we just started doing a proof-of-concept with Netflix’s Falcor router and I admit I cheated and didn’t use TDD because I didn’t really understand what the final result was going to look like (but now that I’ve worked it out, I’m comfortably back into the TDD saddle).
Using TypeScript does allow me to catch silly design-time issues earlier but, honestly, a good linter will give you the same effect.