jason's blogObservations on web standards, browsers, and frontend development

Category: TypeScript

Moving from TypeScript 6 to native TypeScript 7

Use TypeScript 6 to remove old configuration before moving to the Go-based native TypeScript 7 toolchain.

Published 03/23/2026

Honestly, I almost skipped the TypeScript 6 announcement. Everyone was waiting for the much faster Go rewrite in version 7; who gets excited about a release devoted to old configuration? Once I started reading the migration details, version 6 felt like the annoying cleaning day before a move. Skip it, and the old clutter simply will not fit into the new house.

The team positioned TypeScript 6 as the final release of the old JavaScript codebase while keeping API compatibility with 5.9. Projects can clean up on the familiar compiler before choosing when to switch to native tooling.

What TypeScript 6 removes or deprecates

  • target: es5 is deprecated: TypeScript's minimum direction moves to ES2015. Products that still require ES5 will need another transpilation step.

  • Legacy module settings leave: amd, umd, systemjs, and none are unsupported. Old moduleResolution: node should move to nodenext for Node or bundler for a bundler-based project.

  • Interop and strict behavior converge: esModuleInterop and allowSyntheticDefaultImports can no longer be disabled, and code is treated as strict mode. Compatibility branches for older environments are disappearing.

  • outFile is removed: Vite, Rollup, and esbuild already combine output. TypeScript can focus on type checking and declaration emit.

ignoreDeprecations: "6.0" can temporarily silence some warnings, but TypeScript 7 removes the options themselves. It is a transition aid, not a permanent fix.

The surrounding tools still matter in TypeScript 7

TypeScript 7 uses a native Go compiler and language server, with official full-build improvements commonly around eight to twelve times. Version 7.0 does not yet have a stable programmatic API, however. Ecosystems that embed TypeScript—including Vue, Svelte, Astro, MDX, Angular, and typescript-eslint—may not switch all at once.

The @typescript/typescript6 compatibility package keeps the old API available during the transition. Some teams may use the TypeScript 7 CLI for whole-project checks while the editor or framework tooling remains on 6. That is not a failed upgrade; a port of this size naturally needs a handover period.

My take

I see TypeScript 6 as clearing out a house before moving, not as an uninteresting stopgap. Get the project compiling cleanly without ignoreDeprecations, then verify editor, lint, and framework plugin support for 7. That is safer than upgrading only because the official performance numbers look impressive.

In practice, I would separate the TypeScript upgrade from updates to @types/*. Moving both at once and receiving a hundred errors makes it difficult to distinguish compiler behavior from library definitions or framework types. Establish a warning-free 6.x baseline, then introduce the native CLI as a non-blocking CI check before making it authoritative.