TypeScript 6.0 shipped on March 23, 2026 as the last release built on the JavaScript codebase. It adds little new syntax. Its job is to align defaults and deprecate legacy options so that the move to the native TypeScript 7 compiler is boring.
What changed in the defaults
If your tsconfig.json relied on implicit behavior, expect new errors after upgrading:
strictis nowtrueby default.moduledefaults toesnextandtargetfloats to the current ES edition (es2025at the time of writing).typesdefaults to[], so global@types/*packages are no longer included automatically.noUncheckedSideEffectImportsis on, soimport './styles.css'must resolve.
The types change is the one most projects notice first. Declare what you need explicitly:
{
"compilerOptions": {
"target": "es2025",
"module": "esnext",
"moduleResolution": "bundler",
"strict": true,
"types": ["node"],
"skipLibCheck": true
}
}
Deprecated options
Legacy settings such as moduleResolution: "node" (the old node10 behavior) and target: "es5" are deprecated and scheduled for removal in 7.0. You can silence the warnings while you migrate:
{
"compilerOptions": {
"ignoreDeprecations": "6.0"
}
}
Treat this as a temporary bridge, not a fix. Options silenced this way stop working in TypeScript 7.
Newer library types
The es2025 lib now includes types for features that are already shipping in runtimes: new Set methods, iterator helpers, Promise.try and RegExp.escape.
const admins = new Set(['ann', 'bob']);
const online = new Set(['bob', 'cleo']);
const onlineAdmins = admins.intersection(online); // Set { 'bob' }
const pattern = new RegExp(RegExp.escape('1+1=2'));
A migration checklist
- Upgrade to TypeScript 6.0 and run
tsc --noEmit. - Add
typesexplicitly and fix any missing globals. - Replace deprecated options instead of silencing them.
- Try
--stableTypeOrderingto make type ordering match 7.0 and reduce differences between the two compilers. - Only then upgrade to 7.0 (see our next article).
Doing these steps on 6.0 keeps the 7.0 upgrade a version bump rather than a project.