TypeScript 7.0 was announced on 8 July 2026. It is the native port: TypeScript's checker and tools rewritten in Go, installed from the same typescript package and run as the same tsc. The announcement reports full builds 8 to 12 times faster than 6.0, and much quicker errors in the editor.
For JavaScript the port is more than a speed-up. Its checking of .js files was reworked to match .ts files, and several patterns from Closure Compiler and pre-class JavaScript are no longer understood: @enum, @class constructor functions, Closure function types, a value's name used as a type. This site's pages describe TypeScript 5.9, and every example on them also runs under 7.0.2 each time the site is built; this page reports the announcement and the port's list of changes, with what those runs show.
At a glance
| Release | TypeScript 7.0 |
|---|---|
| Released | 8 July 2026, the day of its announcement on the TypeScript blog |
| Source | Announcing TypeScript 7.0 |
| Examples | The snippets on this page follow the release notes and are not checked. Every example elsewhere on this site runs under TypeScript 7.0.2 as well as 5.9.3 when the site is built; the results are counted below. |
| Previous release | TypeScript 6.0 |
What changed for JavaScript
A native tsc
Install typescript 7 and run tsc as before. Parsing, checking and writing output run in parallel; the experimental --checkers option sets how many type-checking threads run (4 by default), --builders does the same for project references, and --singleThreaded turns parallelism off. Watch mode was rebuilt on a new file watcher.
npm install --save-dev typescript@7
npx tsc -p jsconfig.json The 6.0 defaults, and no deprecated options
7.0 checks like TypeScript 6.0 with stableTypeOrdering on: strict on, types empty, module: esnext, noUncheckedSideEffectImports on. The options 6.0 deprecated are now errors, among them baseUrl, moduleResolution: node and classic, target: es5, esModuleInterop: false and alwaysStrict: false. TypeScript 7.0.2 reports them as removed: TS5102 for a removed option, TS5108 for a removed value, such as allowSyntheticDefaultImports: false on the esModuleInterop page.
JSDoc that 7.0 no longer reads
The port's list of changes says JavaScript files are now analyzed like TypeScript files with a different syntax for types, and drops most Closure-specific support. For JSDoc that means:
- A value's name is not a type.
{defaults}must become{typeof defaults}(TS2749 otherwise). @enumis an ordinary tag. Type the values with a@typedefover the object, as below.@classand@constructorno longer make a function a constructor, and constructor functions withprototypeassignments are not modeled: write aclass.- Closure function types such as
{function(string): number}are not parsed; write{(s: string) => number}. {?}is not a type (write{any}), and the postfix!is not supported.- A JSDoc rest type,
{...number}, meansnumber[]and no longer makes a parameter a rest parameter; write...valuesin the parameter list. Usingargumentsno longer lets callers pass extra values either. - Smaller changes from the same list: a
@paramtag no longer types more than one function, a@typecast no longer narrows the variable it is written on (as a cast in a.tsfile does not), and@overloadon an arrow function or function expression is ignored.
export const Status = /** @type {const} */ ({ Draft: "draft", Live: "live" });
/** @typedef {(typeof Status)[keyof typeof Status]} StatusValue */
/** @param {StatusValue} status */
export function label(status) {
return status.toUpperCase();
} CommonJS patterns
The same list narrows what TypeScript reads in CommonJS files:
- A module uses either
module.exports = …ormodule.exports.name = …, not both. const mod = module.exportsaliases andthis.name = …at the top level of a module are not read as exports; writeexports.name.require("fs").readFileis not followed; destructure instead:const { readFile } = require("fs").- Nested exports such as
exports.a.b = 1needexports.adeclared first.
Declaration files written from JavaScript
Declaration output and JavaScript parsing were largely rewritten, and the port's notes say .d.ts files written from .js files will differ from 6.0's; matching the old output exactly is not a goal. A library that ships types written from its JSDoc should compare its .d.ts files before releasing with 7.0. 6.0's stableTypeOrdering previews the new ordering.
Editors and tools
VS Code has a TypeScript 7 extension that becomes the default, with commands to switch between the 7 and 6 language servers; Visual Studio picks 7 per workspace; other editors talk to the new language server over LSP. 7.0 ships without a programmatic API, which 7.1 is meant to bring, so tools that call TypeScript as a library keep using 6.0 through the @typescript/typescript6 package and its tsc6 command. Editor support for Vue, Svelte, Astro, MDX and Angular templates still needs 6.0.
This site's examples under 7.0
This site runs every one of its 750 example projects under TypeScript 7.0.2 when it is built (last on 21 October 2026), and compares each with 5.9.3. 717 report exactly what 5.9.3 reports; 33 differ, for these reasons (an example can have two):
- 8 because of defaults that changed in 6.0:
rootDirdefaults to the config's folder (3), Side-effect imports are checked by default (1),moduledefaults toesnext(1),targetdefaults to the newest ECMAScript year (1),typesdefaults to an empty list, so the hint names the types field (2). - 4 because of options 6.0 deprecates and 7.0 removes: Every file is parsed in strict mode (1),
allowSyntheticDefaultImports: falseis deprecated, then removed (2),moduleResolution: classicis gone (1). - 19 because of JSDoc and JavaScript patterns 7.0 no longer reads:
@enumno longer declares a type (4), Constructor functions are not classes (4), Closure function types do not parse (2), A value's name is not a type (1), Usingargumentsno longer allows extra arguments (1), Assigning toglobalThisdoes not declare a global (2), A@typedefname used as a value is not reported (1), A mismatched@extendsalso reports the missing type arguments (1), A misspelled@importname is reported even when unused (1), A function typed with@typeis not checked for a missing return (1), A type guard naming a missing parameter is reported (1). - 4 because of other checker changes: An unresolved side-effect import has its own code (1), A misspelled
requirename loses its hint (1), Some argument errors are reported by what is missing (1), Conflicts between packages' types are reported underskipLibCheck(1). - 3 because of the
.d.tsfiles written from JavaScript: 7.0 writes different.d.tsfiles from JavaScript (3).
The full list of differences explains each class and links the pages that show its examples.
What did not change
The announcement says code that checks cleanly under 6.0, with stableTypeOrdering on and no ignoreDeprecations, should check the same under 7.0. Neither the announcement nor the port's list mentions checkJs or jsconfig.json; in this site's runs a jsconfig.json project keeps its file-name defaults under 7.0.2, as under 6.0.3. The common tags (@param, @returns, @type, @typedef, @template, @satisfies, @import, @overload on declarations) behave as in 5.9 in every example that uses them, apart from the classes counted below.
Upgrade notes
Per the announcement and the port's notes:
- Move to 6.0 first and clear its deprecation errors; 7.0 removes those options.
- Turn on
stableTypeOrderingin 6.0 to see 7.0's type ordering, especially in written.d.tsfiles. - Rewrite Closure types,
@enumobjects and constructor functions before switching; each has a form that works in 5.9 as well. - Keep 6.0 installed beside 7.0 for tools that need TypeScript's API, such as typescript-eslint, until they support the new one.
Gotchas
- This site's pages describe TypeScript 5.9. Every example also runs under 7.0, and where 7.0.2 reports something else, the example's badge shows ✗ and its page explains why in a section "Under TypeScript 6.0 and 7.0".
Sources
- Announcing TypeScript 7.0 · TypeScript blog
- CHANGES.md: changes between TypeScript 6 and the native port · microsoft/typescript-go on GitHub
- Announcing TypeScript 6.0 · TypeScript blog
Last reviewed 21 October 2026.