Typed Languages (Summer 2016)

Table of Contents

1. Summary (summer 2016)

What was current in summer 2016, as recorded then. Original links are dead and point to Wayback Machine snapshots from the same period.

1.1. Typed JavaScript (transpiled)

Recommended: TypeScript, for Angular 2. The Angular 2 quickstart was written in TypeScript first (archived quickstart, April 2016).

1.2. Typed JavaScript (frameworks)

Optional, for React. React components declared runtime propTypes; static types were the developer's choice (archived "Reusable Components", June 2016).

1.3. Typed Scheme

Listed, with no verdict recorded. Typed Scheme had already been renamed Typed Racket in 2010.

1.4. Typed Clojure

correct · refresh-agent · 2026-10-08

Not recommended: core.typed. The reference was CircleCI's Why we're no longer using Core.typed (September 2015), which dropped it after two years on a 94k-line codebase. Their reasons: two minutes to type-check one namespace, Clojure forms the checker could not handle (get-in, comp), and unannotated third-party libraries. The practical result was ^:no-check spreading until the guarantees thinned out.

1.5. Haskell

Listed with one link and no verdict: Frames, type-safe data frames for tabular data.

2. Since then

As of October 2026.

2.1. TypeScript won

correct · refresh-agent · 2026-10-08

The "optional for React" line did not age. React 15.5 split PropTypes into a separate package, and React 19 stopped checking propTypes on function components; the React 19 upgrade guide points to TypeScript instead. TypeScript is the default for new JavaScript work.

Two 2026 changes matter more than market share. TypeScript 7.0 (July 2026) is the compiler ported to Go, roughly 10x faster on full builds than 6.0 with the same checking behaviour. And Node.js runs .ts files directly by stripping types: on by default since v23.6.0 and v22.18.0, marked stable in v25.2.0 and v24.12.0. Stripping performs no type checking and rejects syntax with runtime semantics (enums, namespaces with code, parameter properties). TypeScript 5.8's --erasableSyntaxOnly flag exists to keep code inside that subset.

2.2. Flow

Flow was the other answer to "typed React" in 2016. It is still released (v0.334.0, 2026-10-02) and still type-checks Meta's own code, but outside Meta it lost. Jest announced its move from Flow to TypeScript in the Jest 24 post (January 2019), the pattern most open-source Flow users followed.

2.3. Types in JavaScript itself

correct · refresh-agent · 2026-10-08

The TC39 type annotations proposal ("types as comments") would let engines parse and ignore a TypeScript-like annotation syntax. It reached Stage 1 in March 2022 and has not advanced; its README cites no meeting after September 2023. Node's type stripping delivers most of the practical benefit without the standard.

2.4. Typed Clojure, spec, Malli

The 2016 verdict held for most teams, but the project did not die. Typed Clojure is still maintained by Ambrose Bonnaire-Sergeant (1.3.0, commits in July 2026), split into separate checker and runtime modules, and can type-check against Malli schemas (typed.malli). The community answer to "types in Clojure" moved elsewhere, though: runtime specification rather than static checking. clojure.spec arrived in 2016 and never left alpha; Malli, schemas as plain data, is where most new code went. See clojure.spec: Since then.

2.5. Typed Racket and gradual typing

correct · refresh-agent · 2026-10-08

Typed Racket is the line that 2016 underrated. It began as Typed Scheme (Tobin-Hochstadt and Felleisen, POPL 2008) and is the reference implementation of sound gradual typing: typed and untyped modules mix, with contracts at the boundary assigning blame. The cost of those contracts was the 2016 headline, Takikawa et al., "Is Sound Gradual Typing Dead?" (POPL 2016), which measured slowdowns well past 10x on some typed/untyped mixes. The response was to make the guarantee a choice. Typed Racket now offers three modes: typed/racket (deep, full contracts), typed/racket/shallow (shape checks only) and typed/racket/optional (no runtime enforcement, which is the TypeScript model). TypeScript, Python's type hints and Flow all chose the optional end from the start; the research says what that choice gives up.

The site's current treatment of the two endpoints is Type Systems: One Tool, Four Ways (TypeScript as structural and erasable, Racket as contracts and blame) and its gradual typing bridge.