𝗧𝘆𝗽𝗲𝗦𝗰𝗿𝗶𝗽𝘁 𝟲.𝟬 𝗧𝗵𝗮𝘆 Đổ𝗶 𝗠𝗮𝗻𝗴 𝗧í𝗻𝗵 Đột Phá

TypeScript 6.0 đã ra mắt và nó thay đổi mọi thứ. Bản phát hành này là sự chuyển dịch đáng kể nhất kể từ phiên bản 2.x. Nếu bạn đang dựa vào các thiết lập cũ (legacy), lần build tiếp theo của bạn có khả năng cao sẽ thất bại.

Ba thay đổi lớn sẽ làm lỗi mã nguồn của bạn:

Tại sao điều này lại quan trọng:

Strict Mode Trước đây, bạn phải chủ động bật strict mode. Giờ đây, nó đã trở thành tiêu chuẩn. Khoảng 70% các codebase sẽ gặp lỗi build ngay lập tức. Bạn sẽ đối mặt với các lỗi về thuộc tính chưa được khởi tạo (uninitialized properties), kiểu dữ liệu any ngầm định (implicit any types) và các giá trị null chưa được kiểm tra (unchecked null values).

Loại bỏ hỗ trợ ES5 Bạn không còn có thể nhắm mục tiêu (target) đến ES5 hoặc ES3 trong tsconfig.json nữa. Giá trị mặc định mới là ES2025. Nếu bạn cần hỗ trợ các trình duyệt cũ, bạn phải thêm một công cụ riêng biệt như Babel vào quy trình (pipeline) của mình.

Module Resolution Giá trị mặc định không còn là CommonJS nữa. Hiện tại nó là ESNext. Nếu dự án Node.js của bạn dựa vào hành vi CommonJS ngầm định, bạn phải thiết lập cài đặt module một cách rõ ràng trong file cấu hình.

Cách di chuyển (migrate) mà không làm gián đoạn quy trình của bạn:

  1. Kiểm tra lại cấu hình Đừng để các thiết lập diễn ra ngẫu nhiên. Hãy thêm các giá trị rõ ràng cho strict, target, và module trong tsconfig.json trước khi nâng cấp.

  2. Chốt phiên bản Cố định phiên bản TypeScript của bạn trong package.json. Hãy kiểm tra bản build hiện tại trên phiên bản đang dùng trước khi chuyển sang 6.0.

  3. Sử dụng một nhánh tính năng (feature branch) Cài đặt TypeScript 6.0 trên một nhánh mới. Cập nhật target lên ES2025 và thiết lập kiểu module một cách rõ ràng.

  4. Sửa lỗi kiểu dữ liệu dần dần Chạy trình biên dịch (compiler) mà không xuất file (emitting files) để xem tất cả các lỗi. Hãy tập trung vào các lỗi strictNullChecksimplicit any trước.

  5. Kiểm tra mọi thứ Chạy toàn bộ bộ kiểm thử (test suite) của bạn. TypeScript bắt các lỗi về kiểu (type errors), nhưng các bài kiểm thử của bạn sẽ bắt các lỗi logic gây ra bởi sự nghiêm ngặt mới này.

TypeScript 6.0 là bước cuối cùng trước khi có bản viết lại phiên bản 7.0. Phiên bản 7.0 sẽ sử dụng nhân (core) viết bằng Go. Điều này có nghĩa là việc hỗ trợ các phiên bản cũ (legacy support) sẽ biến mất hoàn toàn.

Hãy hiện đại hóa codebase của bạn ngay bây giờ để tránh khủng hoảng sau này.

Nguồn: https://dev.to/davekurian/typescript-60-launches-strict-mode-by-default-and-drops-es5-support-n31