TypeScript 7.0 RC - The Go Rewrite Reaches Release Candidate

Why This Matters

TypeScript 7.0 hit Release Candidate on June 18, 2026, with stable expected within a month. This is the payoff for the bridge release we [tried and reverted on 2026-03-30](TypeScript 6 is Released) -- the compiler is no longer TypeScript-compiling-itself; it's a methodical port to Go. The headline holds: 7.0 is "often about 10 times faster" than 6.0, from native code plus shared-memory parallelism. The type-checking logic is the same as 6.0 -- they ported structure, not semantics -- so a clean 6.0 codebase should type-check identically, just far faster.
Install side-by-side without committing: npm install -D typescript@rc (the binary reports 7.0.1-rc), and a @typescript/typescript6 shim gives you a tsc6 for A/B comparison.
But "reword all the pain points" is the right framing for this post, because the RC is mostly a list of things that used to be tolerated and are now hard errors. Here's every friction point, in plain terms.

The Pain Points, Reworded

Config defaults you relied on are now errors, not warnings

6.0 deprecated these; 7.0 deletes them. Each of the following stops your build cold:
  • target: es5 is gone. ES5 output is no longer a thing. So is downlevelIteration -- the flag only existed to make ES5 iteration work, and there's no ES5 to down-level to.
  • moduleResolution: node / node10 / classic are gone. You must be on nodenext or bundler. Classic resolution -- the pre-Node algorithm some ancient configs still carried -- is fully removed.
  • module: amd | umd | systemjs | none are unsupported. Use esnext or preserve. The pre-ESM module formats are simply not emitted anymore.
  • baseUrl is eliminated. Path mapping now resolves via paths relative to the project root. Any baseUrl-based import root has to be rewritten.
  • You can no longer turn safety off. esModuleInterop: false, allowSyntheticDefaultImports: false, and alwaysStrict: false are all disallowed -- the permissive side of these switches no longer exists.
  • module as a namespace keyword is forbidden (use namespace), and assert on imports must become with to match the ECMAScript import-attributes standard.

New defaults will surprise an unprepared project

Even if you remove nothing, the defaults changed underneath you:
  • strict: true is now the baseline (was conditional/off).
  • module: esnext is the default (was commonjs) -- the single most likely source of "suddenly everything is an ESM error."
  • types: [] instead of the old implicit ["*"]. TypeScript no longer auto-discovers every @types/* in node_modules; you must list what you actually use: "types": ["node", "jest"]. This is the one most likely to break CI across the ecosystem (and, conversely, the one that speeds builds the most).
  • rootDir is no longer inferred. If your tsconfig.json sits outside your source, you now need an explicit "rootDir": "./src" and matching "include": ["./src"].
  • noUncheckedSideEffectImports: true, libReplacement: false, and stableTypeOrdering: true (which can't be disabled) are all on by default.

Unicode now behaves correctly -- which breaks code that depended on it being broken

Template-literal type inference now splits on Unicode code points, not UTF-16 surrogate halves:
ts
type HeadTail<S> = S extends `${infer Head}${infer Tail}` ? [Head, Tail] : never;
type Result = HeadTail<"😀abc">;
// 7.0:        ["😀", "abc"]
// Previously: ["\ud83d", "\ude00abc"]
This is strictly more correct, but any type-level string utility that was written around the old surrogate-pair behavior will now produce different types.

JavaScript (.js) analysis was realigned with .ts -- old JSDoc tricks stop working

If you lean on checked JavaScript, a pile of loose patterns are gone: values can no longer stand in for types (use typeof value), @enum JSDoc is removed (use @typedef), bare ? is no longer a type (use any), @class no longer turns a function into a constructor (write a real class), postfix ! is unsupported, and Closure-style function(string): void signatures are dropped. Special handling for this-aliasing and prototype reassignment is also gone. Net: JS-with-JSDoc shops have real migration work.

The parallelism is fast but has sharp edges

The speed comes from 4 parallel type-checking workers by default (--checkers), plus a separate --builders flag for parallel project-reference builds -- and these multiply (--checkers 4 --builders 4 = up to 16 concurrent checkers, which is usually too many). More cores means more speed and more memory. The subtle trap: with varying --checkers counts you can, in rare cases, surface order-dependent type-checking results -- so if cross-environment consistency matters, pin a fixed checker count everywhere (or use --singleThreaded for debugging and apples-to-apples comparison). The --watch mode was also rebuilt on Parcel's file-watcher (ported C++→Go), fixing the old node_modules polling tax.

It's an RC, so the ground is still moving

  • The programmatic compiler API is unstable until 7.1 (several months out). Anything that imports typescript as a library rather than shelling out to tsc should wait.
  • The team tracks remaining 6.0→7.0 differences in a CHANGES.md; some JavaScript patterns are still in flux.
  • Command-line builds now require --ignoreConfig to bypass a present tsconfig.json.
  • Bugs go to the microsoft/typescript-go repo; Microsoft is explicitly asking for pre-stable feedback.

What To Watch

  • Whether our Astro toolchain peer-deps have caught up. We reverted TS 6 on 2026-03-30 because tsconfck, @astrojs/check, and svelte2tsx still pinned TS 5.x. 7.0 RC raises the same question -- the editor story now runs through the TypeScript Native Preview VS Code extension and a new multi-threaded LSP, so our astro knots sites can't adopt it until that chain moves.
  • The types: [] default breaking CI across our repos -- the most likely silent failure.
  • The one-month window to stable, and 7.1 for a stable programmatic API.
  • Real-world validation is already broad (Bloomberg, Canva, Figma, Google, Linear, Notion, Slack, Vercel, VoidZero all report ~10x), and the LSP reportedly fails 20x fewer commands than 6.0 against GitHub's top codebases -- so the question for us is ecosystem peer-deps, not compiler readiness.