I have to say I really enjoy using TypeScript! I’m a big fan of static typing and appreciate the confidence it gives me whilst refactoring. Plus the intellisense help is of course useful for exploring APIs.
Another annoyance is the entire set of features related to TypeScript classes. It seems to me that the whole reason for their existence is to provide some familiarity for developers accustomed to the C-family of languages, e.g. c#, java, etc. to abstract away from prototypal inheritence.
Another problem is also related to the implementation via prototypes and it involves binding the value of this. We’re using knockout.js at my company to provide rich client side behaviour. Unwittingly I used an instance of a TypeScript class as a property of my view-model. The class, which referred to this stopped working due to knockout changing its value as part of the process of binding it to the view. Unfortunately as the unit tests were passing this was quite confusing!I believe the abstraction is leaky and will trip up more developers in the future. I’d recommend sticking to vanilla functions and building behaviour via composition rather than inheritance.