&gt; Given the fact that dynamic languages (including maligned ones like JS and even PHP) seem to be about as equally successful in terms of shipped software as statically manifest typed languages, whether or not even something like TypeScript is really going to give engineering teams an edge seems like far from a settled question to me<p>I&#x27;m always so frustrated when I read this, because I&#x27;ve worked on a few dynamic language codebases as well as seen a few open source ones on github. Very often I see the pattern of the project contributors losing control over the dynamic language project. They slip up, the tests become insufficient and now they refuse &#x2F; are afraid to touch critical parts of the code. Soon development slows down to a crawl. Or rather, there are no more changes - only additions &#x2F; grafts to the existing codebase.<p>When I first started using TypeScript, I feared that I&#x27;m going to lose the benefits of a dynamic language and that I&#x27;ll have to write a lot more boilerplate. I had no idea how little of that was true. TypeScript really goes out of its way to model as many JS idioms as possible, including some really dynamic ones:<p><pre><code>  * Structural types are formalized duck type checking. You don&#x27;t 
    have to say your object implements an interface: if it has all 
    the right fields, and they&#x27;re of the right type, it does. This is 
    similar to Go interfaces (but a bit more powerful in what it can express).
  * Unions types plus type guards can model dynamic function arguments
  * Intersection types can model record (object) merging
</code></pre>
The entire type system in TypeScript is basically a formalization of the typical duck typing patterns that are common in JavaScript. As a result, TypeScript can model almost any common JS idiom. The loss of expresivity was very minimal - maybe 1% of the most dynamic code only. And even there, you can tell the type system &quot;I know what I&#x27;m doing&quot; (cast to `any`), turn it off, do your dynamic stuff and then tell it the resulting types (cast to whatever types are the result before returning).<p>Given the above, theres been absolutely no doubt in my mind whether TypeScript gave us an edge or not. Its been incomparably better than just plain JS.