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.