TypeScript Features to Avoid

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • Appwrite - The Open Source Firebase alternative introduces iOS support
  • Scout APM - Less time debugging, more time building
  • SonarLint - Deliver Cleaner and Safer Code - Right in Your IDE of Choice!
  • TypeScript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

    I think the attitude that they show in #1 - that TypeScript is only supposed to add typing to JavaScript and everything that goes beyond is bad - is wrong.

    In fact, the only major problem I have with TypeScript is the lack of operator overloading [1]. This feature has been denied with the exact same justification. They will not add any feature that emits additional logic, so they cannot add operator overloading unless JS adds it. Also they will not add anything that needs runtime type lookup.

    I think very simple, stupid syntactic sugar would be sufficient to solve 90% of use cases. For example, and please don't take this apart, I'm just making it up on the spot: transforming `a + b` to `a._op_add(b)` if a is not provably `any` or a primitive type.

    Without operator overloading, for example vector math looks really ugly. I hope somebody will make at least a babel plugin or something to allow that.

    [1]: https://github.com/microsoft/TypeScript/issues/6936

  • esbuild

    An extremely fast JavaScript and CSS bundler and minifier

    I've just looked this up and it seems to support `const enum` just fine[0]. I remember Babel not being able to process `const enum`, since it goes across module boundaries and Babel does not.

    [0]: https://github.com/evanw/esbuild/issues/128

  • Appwrite

    Appwrite - The Open Source Firebase alternative introduces iOS support . Appwrite is an open source backend server that helps you build native iOS applications much faster with realtime APIs for authentication, databases, files storage, cloud functions and much more!

  • DefinitelyTyped

    The repository for high quality TypeScript type definitions.

    The symbol, as a whole, isn't shorter. But, it's easier to read (and write!). It also helps disambiguate where in the symbol each component of the type's name should reside, when the producer wants to for example add a new type or function.

    The argument against presented by the article boils down to: it creates unnecessary fluff in the emitted javascript. That's a reasonable argument; it does. In practice, it's more nuanced. First: I've never seen it cause an issue. So, premature optimization, YMMV, etc. Second: the fluff is erased for types anyway; so it only becomes an issue for functional code defined like this (all of my examples were in types, but its easy to imagine a Google.User.List function). Third, though not a direct counterargument to the article: it's literally how Google organizes the types we've been talking about [1] (though, how they organize the functional code, I'm not sure).

    [1] https://github.com/DefinitelyTyped/DefinitelyTyped/blob/mast...

  • rfcs

    RFCs for changes to Ember (by emberjs)

    The latest versions of Ember.js (Octane) have built-in decorator support and they're discussed in the RFC:

    https://github.com/emberjs/rfcs/blob/master/text/0408-decora...

    https://guides.emberjs.com/release/in-depth-topics/native-cl...

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts