Table of Contents
1408 words
7 minutes
TypeScript 6.0 Officially Released: The Last JS Version, Paving the Way for Go-Native 7.0

1. Introduction#

On March 23, 2026, Microsoft officially released TypeScript 6.0, announced by TypeScript Chief Product Manager Daniel Rosenwasser on the official DevBlog. This is a milestone release in TypeScript’s evolution, bridging the past and the future.

TypeScript 6.0 has a very special identity—it is the last major version built on the existing JavaScript codebase. Microsoft has confirmed that TypeScript 7.0 will use the Go language to completely rewrite the compiler and language service, codenamed “Project Corsa”, with an expected 10x improvement in compilation speed.

The core mission of TypeScript 6.0 is: before fully migrating to the Go native compiler, clean up as much historical debt as possible, adjust default behaviors, and introduce new type system capabilities, allowing developers to smoothly transition to the upcoming TypeScript 7.0 era.


2. Core Positioning: A “Bridge Version” Connecting Past and Future#

2.1 Why Is It the Last JS Version?#

Since its inception, TypeScript’s compiler has been self-hosted using TypeScript/JavaScript. As project scale grew and the user base expanded (over 10 million developers worldwide), the performance bottleneck of JS single-threading became increasingly prominent.

Microsoft launched Project Corsa in 2025—rewriting the TypeScript compiler core in Go:

DimensionCurrent JS CompilerUpcoming Go Compiler
Concurrency ModelSingle-threaded + WorkerShared-memory multi-threading
Compilation SpeedBaseline10x improvement
Memory EfficiencyJS GC managedNative memory management
LSP ResponseDepends on project sizeExtremely low latency

2.2 Development Progress of 7.0#

TypeScript 7.0 is “very close to completion,” and Nightly Builds can be experienced early through the following:

Terminal window
npm install -D @typescript/native-preview

Meanwhile, VS Code users can install the corresponding Nightly extension to test the actual performance of the Go native compiler on large codebases.


3. New Features#

3.1 es2025 Target / Lib#

TypeScript 6.0 adds es2025 as a compilation target and library option. The core content of the es2025 type comes from TC39 proposals that have reached Stage 4:

  • RegExp.escape(): Safely escape special characters in regular expressions
  • Promise.try(): Unified Promise wrapping for sync/async function calls
  • Iterator helper methods: Chained operations like Iterator.prototype.map/filter/take/drop
  • Set methods: Set operations like Set.prototype.union/intersection/difference/symmetricDifference
// es2025 new capabilities example
const escaped = RegExp.escape("foo.bar"); // "foo\\.bar"
const result = await Promise.try(() => mayThrow());
const nums = new Set([1, 2, 3]);
const evens = new Set([2, 4, 6]);
const union = nums.union(evens); // Set {1, 2, 3, 4, 6}

3.2 Temporal API Type Support#

The Temporal API has reached Stage 4 and will become the standard date-time handling solution for JavaScript. TypeScript 6.0 provides full type support through the esnext.temporal lib:

// Temporal API — modern JavaScript date handling
const now = Temporal.Now.plainDateTimeISO();
const meeting = now.add({ hours: 2, minutes: 30 });
const duration = meeting.since(now);
console.log(duration.toString()); // "PT2H30M"

3.3 Map “Upsert” Methods#

TypeScript 6.0 adds two practical type methods to Map:

  • getOrInsert(key, value): Insert a default value when the key doesn’t exist and return it
  • getOrInsertComputed(key, factory): Compute and insert via a factory function when the key doesn’t exist
const cache = new Map<string, number[]>();
// Traditional approach
let items = cache.get("key");
if (!items) {
items = [];
cache.set("key", items);
}
// 6.0 new approach
const items = cache.getOrInsertComputed("key", () => []);

3.4 Subpath Imports (#/)#

TypeScript 6.0 officially supports Node.js-style in-package import paths under nodenext and bundler module resolution modes:

package.json
{
"imports": {
"#utils/*": "./src/utils/*.ts",
"#components/*": "./src/components/*.ts"
}
}
// Concise imports with the # prefix
import { formatDate } from "#utils/date";
import { Button } from "#components/Button";

3.5 --stableTypeOrdering Flag#

TypeScript 6.0 adds the --stableTypeOrdering migration diagnostic flag. When enabled, 6.0’s type ordering algorithm aligns with 7.0’s deterministic ordering algorithm.

⚠️ Note: This flag may reduce type-checking speed by 25%. Only use it when preparing to migrate to 7.0.

3.6 DOM Type Merging#

The contents of dom.iterable and dom.asynciterable have been merged into the dom lib, and developers no longer need to separately declare iterable DOM types.


4. Major Breaking Changes#

4.1 Overview of Default Value Changes#

This is the most far-reaching change in TypeScript 6.0—multiple historical defaults were flipped all at once:

Config OptionOld DefaultNew DefaultImpact
strictfalsetrueAll strict checks enabled by default
typesAuto-crawl @types[] (empty array)No longer auto-loads global types
modulecommonjsesnextOutputs ESM by default
targetes5es2025Defaults to the latest standard target
rootDirAuto-inferred.Output structure explicitly controlled

4.2 The Huge Impact of types: []#

The most closely watched change is types defaulting to an empty array. This means @types packages are no longer automatically discovered and loaded, and must be explicitly declared via the types field.

The Microsoft team revealed that some projects saw cold build times reduced by 20%-50% as a result.

After upgrading, you must immediately check tsconfig.json:

{
"compilerOptions": {
"types": ["node"] // Must be declared explicitly
}
}

Otherwise, you’ll encounter numerous missing identifier errors such as Cannot find name 'console' and Cannot find name 'process'.

4.3 rootDir Defaults to .#

This change affects the output directory structure:

dist/index.js
# Old behavior (rootDir automatically inferred as src/)
# New behavior (rootDir defaults to .)
# Output: dist/src/index.js ← an extra level!

When upgrading, it’s recommended to explicitly set:

{
"compilerOptions": {
"rootDir": "./src"
}
}

4.4 strict: true Enabled by Default#

TypeScript 6.0 enables strict: true by default, meaning all of the following sub-options are enabled by default:

  • strictNullChecks
  • strictBindCallApply
  • strictFunctionTypes
  • strictPropertyInitialization
  • noImplicitAny
  • noImplicitThis
  • alwaysStrict
  • useUnknownInCatchVariables

If your project previously did not enable strict mode, you may see numerous new type errors after upgrading. Most errors are legitimate, reflecting potential bugs in the code.


5. Deprecated Configuration (to be completely removed in 7.0)#

Options marked as deprecated in TypeScript 6.0 will be completely removed in 7.0. Developers should migrate as early as possible:

5.1 Compiler Options#

Deprecated ItemReplacement
target: es5Use es2015 or higher
--downlevelIterationUse native iteration with the new target
module: amd / umd / systemjsUse esnext or another standard module format
--moduleResolution node (node10)node16 / nodenext / bundler
--moduleResolution classicAny modern resolution strategy
--baseUrlUse paths instead
--outFileUse a bundler
--esModuleInterop falseEnable esModuleInterop uniformly
--allowSyntheticDefaultImports falseEnable default imports uniformly
--alwaysStrict falseComply with the new strict defaults

5.2 Syntax Deprecations#

  • Module namespace syntax: module Foo { } → Use namespace Foo { }
  • Import Assertions: import ... assert { type: "json" } → Use import ... with { type: "json" }

5.3 How to Cope#

In 6.0, you can temporarily suppress deprecation errors via configuration:

{
"compilerOptions": {
"ignoreDeprecations": "6.0"
}
}

But note: 7.0 will no longer support these options at all, and ignoreDeprecations: "6.0" will also cease to work by then.


6. Upgrade Guide#

6.1 Minimal Migration Steps#

The recommended process for upgrading an existing project to TypeScript 6.0:

Terminal window
# 1. Upgrade TypeScript
npm install -D typescript@latest
# 2. Check the TypeScript version
npx tsc --version

6.2 Required Configuration Adjustments#

After upgrading, most projects need two configuration adjustments immediately:

{
"compilerOptions": {
// 1. Explicitly declare the type source (required!)
"types": ["node"],
// 2. Explicitly set rootDir (otherwise the output structure breaks)
"rootDir": "./src"
}
}
Existing projects
├── Upgrade to TypeScript 6.0
├── Handle new errors caused by strict being enabled by default
├── Explicitly set types, rootDir
├── Eliminate deprecation warnings one by one
├── Configure the new module/target defaults
├── (Optional) Enable --stableTypeOrdering tests 7.0 compatibility
└── Prepare for the TypeScript 7.0 Go compiler

6.4 Incremental Migration in Large Projects#

For large codebases, it is recommended to:

  1. First run 6.0 compilation separately in CI, without blocking the main workflow
  2. Gradually fix strict errors, batch by file or directory
  3. Use ignoreDeprecations to buy time, but have a clear plan for eliminating them
  4. Try out @typescript/native-preview early, to assess 7.0 compatibility in advance

7. Release Timeline and Outlook#

7.1 Timeline#

DateMilestone
February 11, 2026TypeScript 6.0 Beta released
March 6, 2026TypeScript 6.0 RC released
March 23, 2026TypeScript 6.0 officially GA
Coming monthsTypeScript 7.0 stable release expected

7.2 Outlook for TypeScript 7.0#

TypeScript 7.0 will be a complete compiler rewrite—not an incremental improvement, but a rebuild of the entire compilation pipeline in Go:

  • Shared-memory multithreading: Full utilization of multi-core CPUs, rather than Worker thread communication
  • Native code performance: Moving away from JS GC, achieving deterministic memory management
  • 10x compilation speed: Compilation times for large projects will drop from minutes to seconds
  • Extremely low LSP latency: Code completion, error hints, refactoring—everything will be faster

7.3 Ecosystem Impact#

TypeScript’s Go rewrite is not just a performance upgrade; it also marks a systems-programming-language-ification trend in the JavaScript toolchain:

Toolchain evolution trends:
JavaScript → TypeScript (self-hosted) → Go/Rust/Zig (systems languages)
Completed / in progress:
✅ esbuild (Go) — extremely fast bundler
✅ Rolldown (Rust) — Vite 8 underlying layer
✅ Oxc (Rust) — high-performance parser
✅ Turbopack (Rust)— Next.js bundling
🔄 TypeScript (Go) — compiler 7.0

This trend means that frontend engineering is shifting from “good enough” to “native performance,” and the developer experience will see a qualitative leap.


8. Summary#

TypeScript 6.0 is a bold yet pragmatic release:

DimensionAssessment
New capabilitiesES2025, Temporal API, Subpath Imports—staying in sync with standards
Default flipsstrict/types/module/target—clearing out historical baggage in one go
Deprecation cleanupRemoving outdated module formats and resolution strategies—reducing the burden for the Go rewrite
Bridge rolestableTypeOrdering, ignoreDeprecations—smooth transition

TypeScript 6.0 is both an endpoint and a starting point. It ends the era of TypeScript’s JavaScript self-hosting, while opening a new era of the Go-native compiler. For developers, now is the time to start upgrading and adapting—because when TypeScript 7.0 arrives, you will be standing at a 10x faster starting line.

TypeScript 6.0 Officially Released: The Last JS Version, Paving the Way for Go-Native 7.0
https://www.hehonglei.com/posts/typescript-6-0-release/
Author
HHLBlog
Published at
2026-03-23
License
CC BY-NC-SA 4.0