TypeScript 6.0 just shipped, and it's not your typical point release. This is the last version built on the JavaScript codebase. Starting with TypeScript 7.0 (codenamed Project Corsa), the entire compiler is being rewritten in Go — promising 10x compile speed and parallel type checking.
That means 6.0 is your bridge release. Microsoft designed it specifically to help you prepare for the Go rewrite. If you migrate now, the jump to 7.0 will be smooth. If you wait... well, you'll be dealing with two major versions of breaking changes at once.
I just migrated three projects this week. Here's everything that broke and how I fixed it.
The Breaking Changes That Will Hit You First
Let's cut to the chase. Here's what changed in the defaults and why your build is probably going to fail the moment you upgrade:
1. strict is now true by default
If you never had "strict": true in your tsconfig and relied on the old default of false, you're about to get a wall of errors. This flips on strictNullChecks, noImplicitAny, strictFunctionTypes, and everything else under the strict umbrella.
The fix: If your codebase isn't ready for strict mode, explicitly set "strict": false in your tsconfig.json. But honestly? This is a sign to start migrating to strict. It catches real bugs.
2. module defaults to esnext
The old default was commonjs. Now it's esnext. If your project still uses require() calls or depends on CommonJS interop without explicit config, things will break.
The fix: For Node.js apps, set "module": "nodenext". For bundled web apps, "module": "preserve" with "moduleResolution": "bundler". If you absolutely need CommonJS for now, set "module": "commonjs" explicitly.
3. target floats to es2025
The target now defaults to the current-year ES spec instead of the old es3 (yes, ES3 was still the default in 5.x). If you're targeting older browsers or Node versions, you need to set this explicitly.
4. types defaults to an empty array
This is the sneaky one. Previously, TypeScript would automatically include every @types/* package in your node_modules. Now, types defaults to [] — meaning nothing gets auto-included.
The fix: Add "types": ["node"] (or whatever types packages you need) to your tsconfig.json. If you're in a Node.js project and suddenly getting 'Cannot find name Buffer' errors, this is why.
5. esModuleInterop and allowSyntheticDefaultImports are permanent
You can no longer set these to false. They were originally opt-in flags to avoid breaking existing projects. Now they're always on. If you had them off for some legacy reason, your import patterns might need updating.
6. moduleResolution "node" (node10) is deprecated
The old "moduleResolution": "node" (which was really node10 resolution) is deprecated. Migrate to "nodenext" or "bundler" depending on your setup. Also, the old "classic" resolution is gone entirely.
The New Stuff Worth Knowing
It's not all pain. There's genuinely useful new stuff in 6.0:
Temporal API Types
The Temporal proposal finally hit stage 4. TypeScript 6.0 ships with built-in types for it. No more moment.js or date-fns for basic date/time operations — the language finally has a proper API. Use --target esnext or "lib": ["esnext"] to access it.
Map.getOrInsert (Upsert)
The "upsert" proposal also hit stage 4. Map.getOrInsert() and Map.getOrInsertComputed() replace that ugly has-then-get-then-set pattern we've all written a thousand times.
Subpath Imports with #/
You can now use #/ as a subpath import prefix in your package.json — the same way you'd use @/ with bundlers. No more long relative import chains. Node.js landed this, TS 6.0 supports it.
The --stableTypeOrdering Flag
This is a migration helper specifically for the 6→7 jump. TypeScript 7's parallel type checking means type IDs can be non-deterministic, so union ordering can change between runs. The --stableTypeOrdering flag makes 6.0's behavior match 7.0's ordering. Warning: it can add up to 25% slowdown, so only use it when actively comparing outputs between versions.
Your Migration Checklist
Here's the exact checklist I followed across my projects. Do these in order:
- Update TypeScript:
npm install -D typescript@6 - Set explicit target: Add
"target": "es2022"(or whatever your runtime supports) to tsconfig.json - Set explicit module:
"nodenext"for Node apps,"preserve"for bundled apps - Set moduleResolution: Replace
"node"with"nodenext"or"bundler" - Add types explicitly:
"types": ["node"](or whatever @types packages you actually use) - Set rootDir explicitly:
"rootDir": "./src"— don't rely on inference - Run tsc with no emit:
npx tsc --noEmit— fix errors iteratively - Test with --stableTypeOrdering: Run once with this flag to see what 7.0 will look like
- Try the 7.0 preview:
npm install -D @typescript/native-preview— see if your project compiles on the Go version already
Why You Should Migrate Now (Not Later)
Microsoft is being very transparent about this: spread the pain across two releases. The features deprecated in 6.0 will be fully removed in 7.0. The defaults that changed in 6.0 are designed to match 7.0's behavior.
If you skip 6.0 and jump straight to 7.0 when it drops, you'll be dealing with:
- All of 6.0's breaking changes at once
- An entirely new compiler with different ordering behavior
- Potentially different type inference results due to parallel checking
- No familiar JS-based tooling to fall back to
Don't be that dev who waits until the deadline. Migrate now while the bridge is still there.
The Elephant in the Room: The Go Rewrite
Let's talk about it. TypeScript 7.0 — Project Corsa — is a complete rewrite of the type checker, language service, and emit pipeline in Go, compiled to a native binary. The promise is massive:
- 10x faster compile times
- Shared-memory multi-threading for parallel type checking
- Lower memory usage
- Native binary distribution — no more Node.js dependency for the compiler
But there's valid concern too. Vue creator Evan You raised questions about Go's WebAssembly performance — meaning browser-based tools like TS Playground and web editors might take a hit. That's a real tradeoff.
You can try the 7.0 preview right now in VS Code. I'd recommend giving it a shot on a smaller project first.
Bottom Line
TypeScript 6.0 isn't optional. It's the migration window Microsoft is giving you before the ground shifts completely. The defaults are finally sensible, the deprecated stuff should've been gone years ago, and the new APIs (Temporal!) are genuinely exciting.
Take an afternoon. Run the checklist. Fix the errors. Future you will thank present you.
I write about web dev, React, Node.js, and the tools I actually use. Check out my other posts or see what I'm building.
