I'm really loving the confines of a "one way to do it" framework like Angular 4. It makes teamwork much easier, speeds up development once you've gotten over the learning curve, and is damned impressive when it comes to app performance.
I'm really looking forward to the day when TypeScript platforms like Angular 4 compile down to WebAssembly and performance goes through the roof.
You will be disappointed https://github.com/WebAssembly/design/issues/219
Once JS has typed objects, I think it can become as much of a valid compiled language as anything else. I'm still holding out hope.
I found thinking about apps easier in Angular too, being that bit more of a conventional system (for want of a better term) than React. Decomposing everything into a component (as I should in React) is a new skill, and will take some thought for me to get right. I started sketching it out for a personal project and went with VueJS so I could get it done quickly.
mobx fascinates me and I will be trying that - with Angular, with React, with anything it goes with.
as far as i know, React is used more widespread
Once the platform development settles down (v2 -> v4 anyone?), I think it'll be the clear option for enterprise level development.
Also NoImplicitAny and StrictNullChecks are two great tastes that taste great together. Everything in your code is now typed, AND TypeScript will now actually make you think about how you are handling (or not handling) null values. These two flags have basically allowed us to completely eliminate all the 'X is not a function of Y' and 'Z is undefined in this' errors - which is pretty amazing because for me at least these were probably the most common JS errors I get.
Also, Typescript now supports (since 2.3) downleveling async/await all the way to ES5, which is very handy.
For me this is the main problem with the language, otherwise it is a good language even without compile time type checking.
Yes and this sucks. There have been a few bugs I've had (can't remember details) where the types or visibility looked OK in the editor but I was bitten at runtime.
No doubt due to my loose configuration - tightening up the linter would help and getting rid of null/undefined overlaps is my next move.
For me it was TypeScript that did it. I came to appreciate strong typing. And ES6, fixing the 'this' scope problems and with a conventional class syntax (I understand prototype inheritance is clever, but it's not the way I've been trained to think). I didn't get to use async/await for various reasons, but that looks to remove my third pain point (callback hell/promises/observables).
RxJS remains a mystery (I swear the API wasn't designed for humans) I use and hope it works, and combining code that use Observables with those that use Promises still wakes me up in a cold sweat.
But now going back to old territory (PHP, Symfony) I miss it. Yesterday's miss was union types. TypeScript has spoiled me.