Still Soft
Trang chủ › Phần Mềm Ứng Dụng

TypeScript 7 viết lại bằng Go: nâng cấp dự án thế nào

Ban biên tập Still Soft ·
TypeScript 7 viết lại bằng Go: nâng cấp dự án thế nào

TypeScript 7.0 được Microsoft phát hành chính thức ngày 8/7/2026, với trình biên dịch được port toàn bộ sang ngôn ngữ Go. Microsoft cho biết build đầy đủ thường nhanh gấp 8–12 lần so với TypeScript 6.0. Cài đặt vẫn bằng lệnh quen thuộc npm install -D typescript, nhưng nhiều tùy chọn cũ trong tsconfig đã bị gỡ thành lỗi cứng, nên dự án lâu năm cần dọn cấu hình trước khi nâng cấp.

Vì sao TypeScript 7 nhanh hơn

Theo InfoWorld (13/7/2026), bản port giữ nguyên cấu trúc và logic của codebase gốc để kết quả kiểm tra kiểu nhất quán giữa hai compiler, nhưng chạy ở tốc độ mã máy và tận dụng đa luồng chia sẻ bộ nhớ. Bản RC ra ngày 18/6/2026; khi đó blog TypeScript của Microsoft mô tả 7.0 "thường nhanh khoảng 10 lần" so với 6.0 và phần kiểm tra kiểu "giống hệt về cấu trúc".

Bên cạnh tốc độ build, language server cũng ổn định hơn: theo kiểm thử fuzz của nhóm phát triển, các lệnh trong editor thất bại ít hơn hơn 20 lần so với 6.0. Với dự án monorepo vài trăm nghìn dòng, đây là khác biệt cảm nhận được ngay khi gõ code.

Các cờ điều khiển song song

  • --checkers: số worker kiểm tra kiểu, mặc định 4.
  • --builders: số project reference build song song.
  • --singleThreaded: ép chạy một luồng, hữu ích khi CI giới hạn CPU hoặc khi cần debug.

Chế độ --watch cũng được viết lại, dùng bản port Go của bộ theo dõi file trong Parcel thay vì cơ chế polling.

Tùy chọn bị gỡ: danh sách cần rà trong tsconfig

Đây là phần gây lỗi nhiều nhất khi nâng cấp. Các thiết lập sau giờ báo lỗi:

  • target: es5 và downlevelIteration.
  • moduleResolution đặt là node, node10 hoặc classic.
  • module đặt là amd, umd, systemjs hoặc none.
  • baseUrl.
  • esModuleInterop hoặc allowSyntheticDefaultImports đặt là false.
  • alwaysStrict đặt là false.
  • Từ khóa module dùng thay cho namespace.
  • asserts trong câu lệnh import (thay bằng with).
  • Truyền đường dẫn file trên dòng lệnh trong thư mục có tsconfig.json, trừ khi thêm --ignoreConfig.

Dự án dùng baseUrl để viết import kiểu components/Button là nhóm bị ảnh hưởng phổ biến nhất. Cách xử lý là chuyển sang paths với đường dẫn tương đối từ tsconfig, hoặc dùng trường imports của package.json.

Giá trị mặc định mới

Tùy chọnMặc định ở TypeScript 7
stricttrue
moduleesnext
targetbản ECMAScript ổn định ngay trước esnext
noUncheckedSideEffectImportstrue
libReplacementfalse
rootDir./
types[] (mảng rỗng)

Mặc định types: [] dễ gây bất ngờ: dự án dựa vào việc tự nạp @types/node hay @types/jest sẽ báo không tìm thấy process, describe. Khai báo rõ các gói types cần dùng trong tsconfig là xong.

Quy trình nâng cấp năm bước

  1. Lên TypeScript 6.0 trước. Microsoft nêu rằng code biên dịch sạch trên 6.0 (bật stableTypeOrdering, không dùng ignoreDeprecations) sẽ biên dịch giống hệt trên 7.0. Xử lý hết cảnh báo deprecation ở bước này.
  2. Dọn tsconfig theo danh sách tùy chọn bị gỡ ở trên.
  3. Cài 7.0 song song với 6.0. Gói @typescript/typescript6 cung cấp lệnh tsc6 để so sánh kết quả trên cùng codebase.
  4. Kiểm tra công cụ phụ thuộc API compiler. TypeScript 7.0 chưa có API lập trình ổn định; Microsoft hẹn sớm nhất ở 7.1. Plugin ESLint dựa trên type, công cụ sinh code, bundler gọi compiler API có thể vẫn cần bản 6.0 trong thời gian này.
  5. Cập nhật editor. Trong VS Code, dùng extension TypeScript Native Preview để có trải nghiệm 7.0 qua LSP. Cách cấu hình extension và workspace có trong bài hướng dẫn VS Code cho lập trình viên.

Thay đổi nhỏ nhưng có thể làm vỡ type

  • Template literal types giờ giữ nguyên code point Unicode, nghĩa là một emoji được tính là một đơn vị thay vì hai nửa surrogate. Code mô hình hóa chuỗi theo đơn vị UTF-16 cần xem lại.
  • Kiểm tra file JavaScript được làm lại để giống phân tích file .ts: phải dùng typeof khi lấy giá trị làm kiểu, bỏ xử lý đặc biệt cho @enum, bỏ kiểu hàm phong cách Closure trong JSDoc.

Đo tốc độ trên chính dự án của bạn

Con số 8–12 lần là mức điển hình Microsoft công bố; dự án thật có thể khác tùy cấu trúc và số project reference. Cách đo đơn giản:

  1. Xóa thư mục output và file .tsbuildinfo để đảm bảo build sạch.
  2. Chạy tsc6 --noEmit với bản 6.0 và ghi thời gian, lặp ba lần.
  3. Chạy tsc --noEmit với bản 7.0, cũng ba lần.
  4. Thử thay đổi --checkers lên 8 nếu máy nhiều nhân, xem thời gian giảm thêm bao nhiêu.

Trên CI, lợi ích thường rõ hơn máy dev vì mỗi job đều build từ đầu. Nếu runner có ít CPU, giữ số checker mặc định hoặc thấp hơn để tránh tranh chấp tài nguyên với các bước khác chạy song song.

Khi nào nên tạm hoãn

Có vài trường hợp chờ thêm là hợp lý: dự án dựa nặng vào plugin compiler hoặc transformer tùy biến, dự án dùng công cụ sinh tài liệu đọc trực tiếp AST qua API, hoặc codebase còn nhiều file JavaScript dùng JSDoc kiểu cũ. Với những dự án này, hãy chạy TypeScript 7 như một bước type-check phụ trong CI để theo dõi lỗi, trong khi build chính vẫn dùng 6.0.

Trong mọi trường hợp, nên ghim phiên bản TypeScript chính xác trong package.json thay vì dùng dấu mũ cho phép tự nâng bản lớn. Khi cả team cùng dùng một phiên bản, lỗi kiểu xuất hiện trên máy này mà không thấy trên máy khác sẽ giảm hẳn, và việc so sánh kết quả giữa 6.0 với 7.0 cũng đáng tin hơn.

Với dự án React, Vue, Angular

Framework frontend dùng TypeScript chủ yếu qua bundler và công cụ kiểm tra kiểu riêng. Khi nâng cấp, hãy đợi framework và bộ công cụ của nó công bố hỗ trợ TypeScript 7 chính thức, nhất là các công cụ kiểm tra template cần compiler API. Trong lúc chờ, vẫn có thể chạy tsc bản 7 riêng cho bước type-check trong CI để hưởng tốc độ. Bức tranh chung về các framework này có trong bài so sánh React, Vue, Angular 2026.

Microsoft cho biết sau 7.0 sẽ quay lại phát triển tính năng mới và một API mới cho hệ sinh thái, với nhịp phát hành khoảng ba tới bốn tháng một bản. Vì vậy, dự án nên coi 6.0 là trạm trung chuyển ngắn hạn chứ không phải nơi dừng lâu dài.

Câu hỏi thường gặp

Cài TypeScript 7 có cần gói riêng như tsgo không?

Không. Bản chính thức cài từ gói typescript quen thuộc. Gói @typescript/native-preview với lệnh tsgo chỉ còn dùng cho bản nightly.

TypeScript 7 có chạy song song với TypeScript 6 được không?

Được. Cài thêm @typescript/typescript6 để có lệnh tsc6 và API của 6.0, tiện cho việc so sánh kết quả hoặc giữ công cụ cần compiler API cũ.

Dự án vẫn cần build ra ES5 thì sao?

TypeScript 7 đã gỡ target es5. Nếu buộc phải hỗ trợ trình duyệt rất cũ, hãy để bundler hoặc Babel hạ cấp code sau bước biên dịch TypeScript, hoặc tạm ở lại TypeScript 6 cho dự án đó.

Khi nào TypeScript có API lập trình ổn định cho bản Go?

Microsoft cho biết API ổn định sớm nhất ở TypeScript 7.1. Các công cụ dựa vào compiler API nên tạm giữ bản 6.0 qua gói tương thích.

Bài liên quan