In the end, there is a cost to type checking. The extent of that cost comes in time and effort to make sure all your interfaces are typed to get the benefit, in some cases this can be a lot of effort. The risk from bugs saved by type checking isn't always offset of that effort. In some cases it is a wash. You do also gain some in refactoring efforts. It's definitely a mixed bag. There's also the fact that TS doesn't keep up with pending JS changes. For long time if you wanted async functions, you needed TS + Babel, which is often painful to configure well, and then try to get webpack's benefits on top. Personally, I wish that TS was a babel preset, like flow is. In fact, I really wish that flow would update to use the typescript definitions, which would be a better configuration pairing imho.