TypeScript 7 là trình biên dịch (compiler) TypeScript được viết lại bằng Go và phát hành dưới dạng chương trình native. Ngôn ngữ vẫn vậy, lệnh vẫn là tsc, package npm vẫn là typescript; điều thay đổi là tốc độ (build đầy đủ nhanh hơn khoảng mười lần), một loạt giá trị mặc định mới và việc xóa các tùy chọn mà TypeScript 6 đã đánh dấu deprecated. TypeScript 7.0 được phát hành ngày 8 tháng 7 năm 2026, và phiên bản trên npm là 7.0.2.
npm install --save-dev typescript@latest
npx tsc --version
Version 7.0.2
Một trong số ít khác biệt bạn thấy được ở cấp độ kiểu là cách template literal type tách chuỗi. JavaScript lưu chuỗi dưới dạng các code unit UTF-16, và một emoji như 😀 chiếm hai code unit:
TypeScript 6 tách template literal type theo code unit, giống text[0]. TypeScript 7 tách theo code point, giống [...text], nên emoji được giữ nguyên vẹn:
type HeadTail<S> = S extends `${infer Head}${infer Tail}` ? [Head, Tail] : never;
type Result = HeadTail<"😀abc">;
// TypeScript 7: ["😀", "abc"]
// TypeScript 6: ["\ud83d", "\ude00abc"]
Vì sao TypeScript được viết lại bằng Go
Cho đến phiên bản 6, trình biên dịch TypeScript được viết bằng chính TypeScript và chạy trên Node.js. Với codebase lớn, điều đó có nghĩa là build chậm, editor mở lâu và tốn nhiều bộ nhớ.
Anders Hejlsberg công bố bản port native ngày 11 tháng 3 năm 2025, trong bài viết có tiêu đề "A 10x Faster TypeScript". Codebase mới có tên mã Corsa, còn codebase JavaScript là Strada. Nhóm phát triển chuyển nguyên code của trình biên dịch cũ sang thay vì thiết kế lại bộ kiểm tra kiểu, nên trình biên dịch mới tuân theo cùng quy tắc và báo cùng các lỗi. TypeScript 6.0 (tháng 3 năm 2026) là bản phát hành cuối cùng của codebase JavaScript và đóng vai trò cầu nối: nó đánh dấu deprecated mọi thứ mà TypeScript 7 sẽ xóa. TypeScript 7.0 ra mắt tiếp theo vào ngày 8 tháng 7 năm 2026.
TypeScript 7 nhanh hơn bao nhiêu
Build đầy đủ các dự án mã nguồn mở, theo số liệu công bố cùng bản 7.0:
| Dự án | TypeScript 6 | TypeScript 7 | Tăng tốc | Bộ nhớ |
|---|---|---|---|---|
| VS Code | 125,7 s | 10,6 s | 11,9x | 5,2 GB xuống 4,2 GB |
| Sentry | 139,8 s | 15,7 s | 8,9x | 4,9 GB xuống 4,6 GB |
| Bluesky | 24,3 s | 2,8 s | 8,7x | 1,8 GB xuống 1,3 GB |
| Playwright | 12,8 s | 1,47 s | 8,7x | 1,0 GB xuống 0,9 GB |
| tldraw | 11,2 s | 1,46 s | 7,7x | 0,6 GB xuống 0,5 GB |
Các lần chạy này dùng mặc định 4 worker kiểm tra kiểu. Với --checkers 8 trên cùng máy, build VS Code mất 7,51 s (16,7x) và tldraw 1,06 s (10,6x), đổi lại tốn thêm bộ nhớ.
Editor cũng được lợi tương tự. Language service giờ chạy như một language server native: trên codebase VS Code, thời gian từ lúc mở editor đến khi thấy lỗi đầu tiên trong một tệp giảm từ khoảng 17,5 giây xuống dưới 1,3 giây. Mức tăng tốc này có ý nghĩa nhất với monorepo, pipeline CI và editor trên codebase lớn.
Những gì vẫn giữ nguyên
- Lệnh và package.
npm install --save-dev typescriptvànpx tsc. Khi cài đặt, npm chọn file thực thi dựng sẵn cho nền tảng của bạn từ các optional dependency như@typescript/typescript-linux-x64, nên bạn không phải cấu hình gì thêm. - Ngôn ngữ. Cùng cú pháp, cùng hệ thống kiểu, cùng mã lỗi.
- Kết quả. Ghi chú phát hành cho biết hầu như mọi đoạn code biên dịch không lỗi với TypeScript 6.0, khi bật cờ
stableTypeOrderingvà không có thiết lậpignoreDeprecationsnào, sẽ biên dịch ra kết quả giống hệt trong TypeScript 7.0.
Giá trị mặc định mới
TypeScript 6.0 đã đổi các giá trị mặc định sau và TypeScript 7 giữ nguyên chúng. Chúng chỉ ảnh hưởng đến những tùy chọn mà tsconfig.json của bạn không thiết lập:
| Tùy chọn | Mặc định mới | Ảnh hưởng nếu bạn dựa vào mặc định cũ |
|---|---|---|
strict | true | Dự án chưa từng đặt strict giờ có strict null checks, noImplicitAny và các kiểm tra còn lại |
target | es2025, phiên bản mới nhất trước esnext | Đầu ra giữ cú pháp hiện đại, trừ khi bạn đặt target cũ hơn |
module | esnext | Đầu ra là ES module, trừ khi bạn đặt nodenext hoặc commonjs |
types | [] | Các package @types đã cài không còn được tự động nạp: thêm "types": ["node"] (["*"] khôi phục hành vi cũ) |
rootDir | ./, thư mục chứa tsconfig.json | Khi đặt outDir và mã nguồn nằm trong src, sẽ có error TS5011 cho đến khi bạn đặt "rootDir": "./src" |
noUncheckedSideEffectImports | true | Một import chỉ để lấy side effect như import "./styles.css" cần khai báo module (declare module "*.css";), thường đã có sẵn trong package kiểu của framework |
stableTypeOrdering | Luôn bật, không tắt được | Kiểu được sắp xếp giống nhau ở mọi lần chạy, nên thông báo lỗi và đầu ra .d.ts không phụ thuộc vào thứ tự kiểm tra |
Tùy chọn và cú pháp bị xóa
Các tùy chọn bị đánh dấu deprecated trong TypeScript 6 trở thành lỗi trong TypeScript 7:
target: es5, vàdownlevelIteration, vốn chỉ tồn tại cho đầu ra ES5.moduleResolution: node(còn gọi lànode10) vàclassic. Dùngnodenexthoặcbundler.module: amd,umd,systemvànone.baseUrl(viếtpathstương đối so với tệp tsconfig) vàoutFile(dùng một bundler).esModuleInterop: false,allowSyntheticDefaultImports: falsevàalwaysStrict: false; cả ba giờ luôn bật.
Trình biên dịch nói rõ bạn cần xóa gì:
error TS5102: Option 'baseUrl' has been removed. Please remove it from your configuration.
error TS5108: Option 'moduleResolution=node10' has been removed. Please remove it from your configuration.
Hai dạng cú pháp cũ cũng trở thành lỗi: module Foo { } cho namespace (viết namespace Foo { }; declare module "foo" cho một package thì không bị ảnh hưởng) và import assertion (assert { type: "json" } đổi thành with { type: "json" }).
index.ts(2,8): error TS1540: A 'namespace' declaration should not be declared using the 'module' keyword. Please use the 'namespace' keyword instead.
Đổi module thành namespace ở dòng 2 là sửa được lỗi, và chương trình in ra 4.
Trên dòng lệnh, tsc file.ts trong một thư mục có tsconfig.json giờ dừng với error TS5112 thay vì lặng lẽ bỏ qua cấu hình. Hãy chạy tsc không kèm tham số, hoặc thêm --ignoreConfig. Trong các tệp JavaScript được kiểm tra bằng JSDoc, TypeScript 7 đọc kiểu giống TypeScript hơn: @enum không còn được nhận diện, và một giá trị dùng làm kiểu cần typeof. Trang tsconfig liệt kê cách thay thế cho từng tùy chọn bị xóa.
Công cụ vẫn cần TypeScript 6
TypeScript 7.0 chưa có JavaScript API ổn định. require("typescript") chỉ trả về thông tin phiên bản (version và versionMajorMinor), còn các hàm của trình biên dịch mà công cụ khác gọi (createProgram, language service) thì không có; các entry point typescript/unstable/* của package chỉ là thử nghiệm và không thay thế được. Ghi chú phát hành cho biết nhóm dự kiến TypeScript 7.1 sẽ có một API mới, khác với API cũ. Cho đến lúc đó, mọi thứ import trình biên dịch như một thư viện vẫn dùng TypeScript 6:
- typescript-eslint (các quy tắc lint hiểu kiểu)
- Công cụ ngôn ngữ cho tệp Vue, Svelte và Astro, kiểm tra kiểu template của Angular, và MDX
- ts-node, vốn bị crash ngay khi khởi chạy nếu đã cài TypeScript 7
Với các công cụ này, TypeScript cung cấp một package tương thích, @typescript/typescript6, cài TypeScript 6 với đầy đủ API và lệnh tsc6. Nhờ alias của npm, một dự án có thể có cả hai: TypeScript 7 lo việc build, còn các công cụ import typescript nhận phiên bản 6.
{
"devDependencies": {
"@typescript/native": "npm:typescript@^7.0.2",
"typescript": "npm:@typescript/typescript6@^6.0.2"
}
}
Sau khi chạy npm install:
$ npx tsc --version
Version 7.0.2
$ npx tsc6 --version
Version 6.0.3
Nếu không dùng công cụ nào kể trên, bạn chỉ cần cài typescript bình thường và bỏ qua bước này.
Tùy chọn dòng lệnh mới
Trình biên dịch native phân tích cú pháp, kiểm tra và xuất code song song. Ba cờ mới điều khiển việc này, và ghi chú phát hành gọi --checkers và --builders là tính năng thử nghiệm:
| Cờ | Tác dụng |
|---|---|
--checkers N | Số worker kiểm tra kiểu cho mỗi dự án (mặc định 4). Tăng lên có thể giúp ích trên máy nhiều nhân nhưng tốn bộ nhớ; giảm xuống hợp với runner CI nhỏ. |
--builders N | Số dự án được build cùng lúc trong một lần --build với project reference. Giá trị này nhân với --checkers: 4 builder với 4 checker có thể chạy 16 checker cùng lúc. |
--singleThreaded | Tắt toàn bộ xử lý song song, dùng khi gỡ lỗi hoặc khi bộ nhớ bị giới hạn chặt. |
--watch cũng được viết lại, dựa trên bản port sang Go của bộ theo dõi tệp trong bundler Parcel.
Hỗ trợ editor
Với VS Code, nhóm TypeScript phát hành một extension riêng cho TypeScript 7; khi cài xong, extension này trở thành mặc định, và lệnh "Disable TypeScript 7 Language Server" trong command palette chuyển về TypeScript 6. Visual Studio bản mới nhất tự bật TypeScript 7 dựa trên workspace, còn các editor khác (Neovim, Zed, Sublime Text, Emacs) kết nối với nó qua Language Server Protocol. Dự án dùng tệp Vue, Svelte, Astro, MDX hoặc template Angular vẫn dùng hỗ trợ editor dựa trên TypeScript 6 cho đến khi TypeScript 7 có API mà các công cụ đó dùng được. Dự án Angular vẫn có thể chạy tsc của TypeScript 7 để kiểm tra nhanh toàn bộ dự án.
Cách nâng cấp lên TypeScript 7
- Nâng cấp lên TypeScript 6 trước, nếu bạn đang ở bản 5.x:
npm install --save-dev typescript@6. Sửa mọi lỗi deprecation mà nó báo, đừng tắt chúng bằng"ignoreDeprecations": "6.0". - Bật
"stableTypeOrdering": truetrên TypeScript 6 và sửa những gì bị thay đổi. Đây là cấu hình mà nhóm phát triển khẳng định sẽ biên dịch giống hệt ở bản 7. - Đặt các tùy chọn có mặc định đã đổi nếu bạn phụ thuộc vào giá trị cũ, ví dụ
"types": ["node"]và"rootDir": "./src". - Cài TypeScript 7:
npm install --save-dev typescript@latest. Sau đó bạn có thể xóastableTypeOrderingnếu muốn; ở bản 7 nó luôn bật. - Kiểm tra bộ công cụ. Nếu bạn dùng typescript-eslint, ts-node hoặc một framework có kiểm tra kiểu template, hãy thiết lập alias TypeScript 6 như ở trên.
- Xác nhận phiên bản bằng
npx tsc --version, và đảm bảo CI cài từ lockfile đã cập nhật.
tsgo và các bản preview
Trước khi phát hành, trình biên dịch native được công bố dưới tên @typescript/native-preview, với lệnh tsgo, để có thể dùng thử song song với tsc bản JavaScript. Các bài viết từ năm 2025 và đầu năm 2026 nhắc đến tsgo. Từ bản 7.0, cái tên đó không còn dùng hằng ngày nữa: trình biên dịch native là tsc, và các bản nightly được phát hành dưới tên typescript@next (hiện là các phiên bản phát triển 7.1).
Câu hỏi thường gặp
TypeScript 7 là gì?
TypeScript 7 là bản phát hành đầu tiên của trình biên dịch TypeScript được viết lại bằng Go và biên dịch thành chương trình native, thay vì chạy dưới dạng JavaScript trên Node.js. Nó kiểm tra kiểu cho cùng một ngôn ngữ với cùng lệnh tsc, và ghi chú phát hành cho biết một lần build đầy đủ thường nhanh hơn TypeScript 6 từ 8 đến 12 lần. TypeScript 7 được phát hành ngày 8 tháng 7 năm 2026.
TypeScript 7 có được viết bằng Go không?
Có. Trình biên dịch và language service đã được chuyển từ TypeScript sang Go (dự án có tên mã Corsa, còn codebase JavaScript là Strada). Bạn vẫn cài nó từ npm qua package typescript; npm tự chọn một file thực thi native dựng sẵn cho hệ điều hành và CPU của bạn.
Có cần sửa code để dùng TypeScript 7 không?
Thường thì code không cần sửa, đôi khi là cấu hình. TypeScript 7 xóa các tùy chọn mà bản 6.0 đã đánh dấu deprecated (target: es5, moduleResolution: node, baseUrl, outFile và một số khác) và đổi các giá trị mặc định như strict: true và types: []. Code biên dịch không lỗi với TypeScript 6.0, khi bật stableTypeOrdering và không dùng ignoreDeprecations, sẽ biên dịch ra kết quả giống hệt.
tsgo là gì?
tsgo là tên lệnh trong các bản preview của trình biên dịch native, được phát hành dưới dạng package npm @typescript/native-preview trước bản 7.0. Trong TypeScript 7, trình biên dịch native đơn giản là tsc trong package typescript, còn các bản nightly lấy từ typescript@next.
typescript-eslint có chạy được với TypeScript 7 không?
Không trực tiếp. TypeScript 7.0 chưa có JavaScript API ổn định, trong khi các công cụ như typescript-eslint, ts-node và trình kiểm tra template của Vue, Svelte, Angular đều gọi API đó. Hãy giữ TypeScript 6 cho các công cụ này qua package @typescript/typescript6 (một alias npm) và dùng tsc của TypeScript 7 để build. Nhóm TypeScript dự kiến TypeScript 7.1 sẽ có một API mới, khác với API cũ.