Typescript's single biggest win for me is the ability to provide type definitions for my models. This is where the vast majority of my JS bugs come from -- somebody trying to access a nonexistent property of some object (or, if it does exist, incorrectly assuming the type) which was serialized from JSON. Better yet, if you write your back-end in Node you can use the same models in your rest endpoint. It's a huge boost to both maintainability and developer productivity.

However, my biggest frustration with Typescript is the general unreliability of @types. The odds that a given set of typings are complete, correct, and up-to-date are basically nil -- even for some relatively popular projects. Sad to say I've become an expert in Typescript's crazy module augmentation nonsense. Hopefully more big players like Slack contributing to DT will help.

For anyone unfamiliar:

DT is "DefinitelyTyped", a github repo that consolidates type declaration files for open-source packages on npm.

Ironically, given the above comment, its tagline is:

> The repository for high quality TypeScript type definitions. (emphasis theirs)

https://github.com/DefinitelyTyped/DefinitelyTyped