ts6to7 - codemod tự động hóa migration TypeScript 5/6 → 7(tsgo)
(github.com/zi-gae)Hôm qua TypeScript 7 đã được phát hành chính thức. Với trình biên dịch native (tsgo) được viết lại bằng Go, tốc độ nhanh hơn khoảng 10 lần, nhưng toàn bộ các tùy chọn trình biên dịch từng bị deprecated trong TS5/6 đã bị loại bỏ, và giá trị mặc định của strict cũng đổi thành true — nên các dự án có tsconfig cũ đơn giản là không thể nâng cấp được.
Tôi đã tạo một codemod để tự động hóa phần mang tính cơ học đó.
npx ts6to7 --dry # Xem trước (không ghi gì cả)
npx ts6to7 # Áp dụng
Các việc thực hiện:
- Chỉnh sửa tsconfig*.json tại chỗ — dùng jsonc-parser để chỉnh sửa nên comment và định dạng được giữ nguyên
- Chuyển đổi các tùy chọn đã bị loại bỏ sang giá trị tương đương trong TS7: target: es5 → ES2015, module: umd/amd → ESNext, moduleResolution: node → NodeNext/Bundler, importsNotUsedAsValues → verbatimModuleSyntax, v.v.
- Gộp baseUrl vào paths
- Bump dependency typescript lên ^7.0.0
- Nếu strict chưa được thiết lập thì cố định thành false — các file kế thừa config khác bằng extends sẽ không bị thay đổi mà chỉ cảnh báo (vì config cơ sở có thể đã thiết lập strict)
- Những thứ không thể tự động chuyển đổi an toàn (runtime chỉ dành cho ES5, công cụ dựa trên API trình biên dịch cũ như ts-node/ts-jest, thiếu mảng types, v.v.) sẽ được xuất ra dưới dạng checklist "cần kiểm tra thủ công" theo phạm vi từng file
Có thể migration trực tiếp từ TypeScript 5: không cần đi qua 6. Công cụ cũng dọn dẹp các tùy chọn thời TS5 như ignoreDeprecations và prepend trong project references.
Cũng hỗ trợ monorepo (quét tất cả package).
Hiện là 0.2.0. Nếu có trường hợp tsconfig bị chuyển đổi sai, việc báo issue kèm tsconfig đó sẽ giúp ích rất nhiều.
Chưa có bình luận nào.