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: es5is gone. ES5 output is no longer a thing. So isdownlevelIteration-- the flag only existed to make ES5 iteration work, and there's no ES5 to down-level to.moduleResolution: node/node10/classicare gone. You must be onnodenextorbundler. Classic resolution -- the pre-Node algorithm some ancient configs still carried -- is fully removed.module: amd | umd | systemjs | noneare unsupported. Useesnextorpreserve. The pre-ESM module formats are simply not emitted anymore.baseUrlis eliminated. Path mapping now resolves viapathsrelative to the project root. AnybaseUrl-based import root has to be rewritten.- You can no longer turn safety off.
esModuleInterop: false,allowSyntheticDefaultImports: false, andalwaysStrict: falseare all disallowed -- the permissive side of these switches no longer exists. moduleas a namespace keyword is forbidden (usenamespace), andasserton imports must becomewithto match the ECMAScript import-attributes standard.
New defaults will surprise an unprepared project
Even if you remove nothing, the defaults changed underneath you:
strict: trueis now the baseline (was conditional/off).module: esnextis the default (wascommonjs) -- 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/*innode_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).rootDiris no longer inferred. If yourtsconfig.jsonsits outside your source, you now need an explicit"rootDir": "./src"and matching"include": ["./src"].noUncheckedSideEffectImports: true,libReplacement: false, andstableTypeOrdering: 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
typescriptas a library rather than shelling out totscshould 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
--ignoreConfigto bypass a presenttsconfig.json. - Bugs go to the
microsoft/typescript-gorepo; 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, andsvelte2tsxstill 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.