The problem is that using TypeScript locks you into TSC.<p>TypeScript solves one fairly specific problem: adding type annotations and static type checking to JavaScript. In this regard it competes with Flow.<p>But unlike Flow it ships its own transpiler. So if you want support for any new feature you have to wait for the TypeScript team to implement it or you have to abandon TypeScript altogether.<p>Compare this to how Facebook dealt with JSX. JSX solved one fairly specific problem: adding syntactic sugar for nested `React.createElement` calls.<p>Facebook used to provide their own JSX transpiler with support for various experimental features. This had the same problems as using TSC does now. So instead they just replaced their transpiler with Babel using the JSX plugin.<p>In other words, no matter what new features other plugins add to Babel in the future, JSX only has to deal with transpiling JSX.<p>It&#x27;s not about diversity, it&#x27;s about separation of concerns. TSC is for TypeScript primarily but it makes things messy by adding all kinds of unrelated crap it has to support to compete with Babel. That creates a lot of potential for subtle differences and bugs.<p>I&#x27;m not talking about the features TypeScript adds, specifically. The ES proposals are likely going to end up in the ES standard eventually (unless they are dropped in which case you likely don&#x27;t want to be using them anymore anyway), translating &quot;future ES&quot; to &quot;current ES&quot; (or &quot;previous ES&quot; as most Babel plugins produce code that works fine in ES3 environments) is an entirely separate problem from translating &quot;proprietary extension X&quot; (like JSX or TS) to some flavour of ES.<p>But that&#x27;s the crux of the problem, really: TS isn&#x27;t intended to be an extension to ES. It&#x27;s conceived as an entirely separate language that just shares a common subset. It diverged after ES5 and carried on separately. It belongs in the same category as CoffeeScript or LiveScript or ClojureScript, not the same category as JSX or Flow.