Upgrading to TypeScript 7.0: a tsconfig checklist for 5.x and 6.0 projects
TypeScript 6.0 changed long-standing defaults and TypeScript 7.0 replaced the compiler with a native Go port. This step-by-step checklist covers tsconfig changes, removed options and how to keep typescript-eslint working.
Updated 8 min read

In this article
TypeScript changed more in 2026 than in any year since its launch. TypeScript 6.0, released on 23 March 2026, was the last version built on the original JavaScript code base, and it changed several long-standing compiler defaults. TypeScript 7.0, released on 8 July 2026, is a new compiler written in Go. Microsoft's announcement reports full-build speed-ups of between 8x and 12x on the projects it measured.
For a team still on TypeScript 5.x, that means two sets of changes at once: new defaults and removed options from 6.0, and a new compiler with a temporary gap in tooling support in 7.0. Upgrading without a plan can produce hundreds of new errors, a broken lint step, or a build that silently emits files to a different folder.
This guide gives a step-by-step checklist for front-end and full-stack JavaScript projects, based on the official TypeScript 6.0 and 7.0 announcements. It explains what each change means, which tsconfig.json lines to add before upgrading, and how to keep ESLint and framework tooling working during the transition.
The timeline in brief
| Release | Date | What it means for you |
|---|---|---|
| TypeScript 5.9 | 1 August 2025 | Last 5.x feature release |
| TypeScript 6.0 | 23 March 2026 | New defaults, deprecations and removals; last JavaScript-based compiler |
| TypeScript 7.0 | 8 July 2026 | Native Go compiler; legacy options removed; no programmatic API yet |
| TypeScript 7.1 | Not yet released | The team says it expects 7.1 to ship a new, different API |
The recommended path is to move to 6.0 first, fix everything it reports, and only then switch the compiler to 7.0. The 6.0 release exists largely to make that second step uneventful.

Step 1: pin the defaults that changed in 6.0
TypeScript 6.0 changed defaults that many projects relied on without writing them down. The 7.0 announcement confirms that 7.0 keeps these new defaults. The safest first move, while still on 5.x, is to make your current behaviour explicit in tsconfig.json.
| Option | New default in 6.0 | What can break |
|---|---|---|
strict | true | Projects that never enabled strict mode get many new type errors |
module | esnext | Projects relying on a CommonJS default |
target | es2025 | Output syntax may be newer than your oldest supported browser if you emit with tsc |
types | [] | Globals from @types packages (for example test runner globals) disappear unless listed |
rootDir | The folder containing tsconfig.json | Emitted files can land in dist/src/ instead of dist/ |
noUncheckedSideEffectImports | true | Side-effect imports such as import './polyfills' with a typo now error |
libReplacement | false | Projects that replace built-in lib files through packages |
The announcement notes that the old behaviour of automatically including every @types package could slow builds by 20 to 50 percent, which is why types now defaults to an empty list. A typical browser app configuration that is explicit about all of this looks like:
{
"compilerOptions": {
"strict": true,
"target": "es2022",
"module": "esnext",
"moduleResolution": "bundler",
"lib": ["es2022", "dom"],
"types": ["vite/client"],
"rootDir": "./src",
"noEmit": true,
"paths": {
"@/*": ["./src/*"]
}
},
"include": ["src"]
}Adjust target and lib to your real browser support; the values here are examples. If you are not ready for strict mode, set "strict": false explicitly for now and turn on its individual checks later, one at a time. In 6.0 the dom library also includes what used to be dom.iterable and dom.asynciterable, so you can remove those entries.
Step 2: remove options that are deprecated in 6.0 and gone in 7.0
These settings produce deprecation errors in 6.0 and are not supported at all in 7.0:
"target": "es5"anddownlevelIteration. The lowest target is now ES2015. If you still need ES5 output for very old browsers, let your bundler or a separate transpiler handle it."moduleResolution": "node"(also callednode10) andclassic. Usebundlerfor apps built with Vite, webpack or similar, andnodenextfor code that runs directly in Node.js."module": "amd","umd","system"or"none". Removed; use a bundler if you need those formats.baseUrl. Remove it and write full relative prefixes inpaths, as in the example above ("./src/*"rather than"src/*").outFile. Removed; concatenate with a bundler.esModuleInterop: falseandallowSyntheticDefaultImports: false. These can no longer be turned off; safer interop is always on. Delete the lines.alwaysStrict: false. Deprecated; strict mode parsing is assumed.
Two syntax changes may also appear in your source files:
// Before: legacy namespace keyword, now an error
module Analytics {
export const version = 1;
}
// After
namespace Analytics {
export const version = 1;
}
// Before: import assertions, deprecated
import config from './config.json' assert { type: 'json' };
// After: import attributes
import config from './config.json' with { type: 'json' };Fix these in 6.0 rather than postponing them: on 7.0 the options are simply gone, so there is no setting that keeps them working.
Step 3: upgrade to 6.0 and fix the new errors
Install TypeScript 6 and run a type check across the whole project:
npm install -D typescript@6
npx tsc --noEmitWork through the errors in this order, because each group tends to hide the next:
- Configuration errors (removed or deprecated options).
- Missing globals caused by
types: []: add the packages you actually use, such as"types": ["vitest/globals"]or"types": ["node"]in the config that covers build scripts. - Module resolution errors after switching to
bundlerornodenext. - Strict mode errors, usually the largest group. Fix them by folder, and consider committing per folder to keep reviews small.
TypeScript 6.0 also adds a --stableTypeOrdering flag that makes its internal type ordering match 7.0. Running with it on helps you spot the small number of cases where error messages or declaration output would differ after the switch.

Step 4: switch the compiler to 7.0
TypeScript 7.0 is published under the same npm package name and still provides a tsc command:
npm install -D typescript@7
npx tsc --noEmitIf 6.0 compiled cleanly, 7.0 should too. Time the type check before and after; the announcement cites the VS Code code base going from 125.7 seconds to 10.6 seconds and Slack cutting CI type-checking time from about 7.5 minutes to 1.25 minutes. Your results depend on project size and hardware, so measure rather than assume.
Two experimental flags control parallelism: --checkers for type-checking and --builders for building project references. Leave them at their defaults unless you have measured a reason to change them, for example on CI machines with limited memory.
For editors, the TypeScript team publishes a dedicated VS Code extension for TypeScript 7, Visual Studio enables it automatically, and other editors can use it through the Language Server Protocol.
Step 5: keep typescript-eslint and framework tools on 6.0
This is the step most likely to catch teams out. TypeScript 7.0 does not ship a programmatic API. Tools that load the compiler as a library, including typescript-eslint, cannot use 7.0 yet. The announcement also says that Vue, MDX, Astro, Svelte and Angular template type-checking still require 6.0 for now.
The TypeScript team provides a compatibility package, @typescript/typescript6, which installs a tsc6 command and can stand in for the typescript package name. The announcement shows this package.json arrangement to have both:
{
"devDependencies": {
"@typescript/native": "npm:typescript@^7.0.2",
"typescript": "npm:@typescript/typescript6@^6.0.2"
}
}With this setup, tools that import 'typescript' (such as typescript-eslint) receive 6.0, while the tsc command comes from 7.0 for fast type checks and builds. Document the arrangement in your README, because it is easy for a later dependency update to undo it. Revisit it when TypeScript 7.1 and updated versions of your tools are released.
The complete checklist
- Record current type-check time and error count on 5.x.
- Make
strict,module,target,typesandrootDirexplicit in everytsconfigfile, including those for tests and scripts. - Replace
moduleResolution: nodewithbundlerornodenext; removebaseUrland rewritepaths. - Remove
es5targets,downlevelIteration,outFile, AMD/UMD/SystemJS modules andfalsevalues for interop flags. - Replace
modulenamespaces withnamespaceandassertwithwith. - Upgrade to 6.0, fix all errors, and try
--stableTypeOrdering. - Check emitted output paths if you build with
tsc. - Upgrade the compiler to 7.0; keep typescript-eslint and framework checkers on
@typescript/typescript6. - Install the TypeScript 7 editor extension for the team.
- Measure the new type-check time and update CI timeouts and caches.
Summary
Treat the move from TypeScript 5.x to 7.0 as two upgrades. TypeScript 6.0 is where the real migration work happens: new defaults such as strict: true and types: [], and the removal of legacy module and target options. TypeScript 7.0 then brings the native compiler and large speed improvements, with one temporary gap: no programmatic API until 7.1, so linting and some framework tooling stay on 6.0 through the official compatibility package. Plan both steps, measure before and after, and keep your configuration explicit so the next default change does not surprise you.
Frequently asked questions
Can I skip TypeScript 6.0 and go straight to 7.0?
You can install 7.0 directly, but every 6.0 default change and removal still applies. Going through 6.0 first lets you fix deprecations with clear messages, and its
--stableTypeOrderingflag previews 7.0's output ordering.Does typescript-eslint work with TypeScript 7.0?
Not directly. TypeScript 7.0 ships without a programmatic API, so tools that load the compiler as a library keep using 6.0 through the
@typescript/typescript6compatibility package. The team expects 7.1 to ship a new API.Is strict mode now on by default?
Yes. From TypeScript 6.0,
strictdefaults totrue, and 7.0 keeps that default. Set it explicitly tofalseif you need time to migrate.How much faster is TypeScript 7.0?
Microsoft reports 8x to 12x speed-ups on full builds for the projects it measured, such as the VS Code code base dropping from 125.7 to 10.6 seconds. Measure your own project, since results vary.
Your next customer could start right here.
Introduce your tool, product or business to readers exploring technology.
Explore placements and request a private quote
Sources
- Announcing TypeScript 7.0 — Microsoft, 2026-07-08
- Announcing TypeScript 6.0 — Microsoft, 2026-03-23
- TypeScript blog — Microsoft
Written with substantial AI assistance. Facts checked against cited sources. Editorial policy.
Comments
No comments yet. Be the first to join the conversation.
Leave a comment
Every comment is read by a moderator before it appears. Your email address is never published; it is used only to contact you about this comment.
More from Cloudsoft Zone

TutorialJavaScript
JavaScript using declarations: automatic cleanup without finally
Learn JavaScript's using and await using declarations, Symbol.dispose and DisposableStack, with tested browser recipes and October 2026 support data.
By Cloudsoft Zone

Architecture guideJavaScript
Ship JavaScript without a bundler: import maps and JSON modules
How to structure a front end as native ES modules: import maps for bare imports, JSON modules, modulepreload against waterfalls, and cache-busting.
By Cloudsoft Zone

ComparisonJavaScript
structuredClone vs JSON vs spread: deep copy JavaScript safely
Spread is shallow, JSON loses dates, Maps, Sets and undefined, and structuredClone keeps them. A tested comparison of JavaScript copy methods and their limits.
By Cloudsoft Zone
