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
CircleCI post dated 2015-09-23 (archived 2017-07-19); 93,983 lines, 84 of 369 namespaces annotated; reasons: ~2 min type-check per namespace, unsupported forms (get-in, comp), unannotated third-party libraries.
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.
2. Since then
As of October 2026.
2.1. TypeScript won
TS 7.0 announced 2026-07-08 (devblogs.microsoft.com); Node docs: type stripping on by default in v23.6.0/v22.18.0, stable in v25.2.0/v24.12.0.
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
tc39/proposal-type-annotations README states Stage 1; last meeting discussions cited are March and September 2023.
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
Typed Racket guide documents #lang typed/racket (Deep), typed/racket/shallow (Shallow), typed/racket/optional (Optional).
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.