typescript 5 cấu hình strict 2026: siết tsconfig để lỗi xuất hiện ở PR chứ không phải production
· Tác giả: Trường — Founder Webchốt
typescript 5 cấu hình strict 2026 là tập hợp cờ compiler giúp phát hiện null không rõ ràng, object index nguy hiểm và optional property lỏng lẻo trước khi code lên server. Trên dự án Next.js nhiều package, strict là đầu tư giảm chi phí hotfix cuối tuần — nơi mà lỗi kiểu trượt qua vì build tắt kiểm tra từng phần. Bài viết đề xuất lộ trình bật cờ, cách ưu tiên thư mục, và hook CI chặn merge khi tsc fail. Cần đồng hành refactor: dịch vụ, giá, liên hệ — 0905 151 701, hi@webchot.com.
Chạy tsc --noEmit trên CI mỗi PR — không chỉ dựa editor local | Nguồn: webchot.com
tsconfig strict và ưu tiên module lõi trước vỏ UI
Bật strict hoặc noUncheckedIndexedAccess trước cho thư mục domain và parser dữ liệu từ API — nơi bug gây hỏng số liệu tài chính. UI có thể theo sau vì lỗi thường hiển thị nhanh hơn; tuy nhiên đừng trì hoãn vô hạn phần form thanh toán. Ghi baseline số lỗi mỗi tuần để đội thấy tiến triển, tránh cảm giác bế tắc.
typescript 5 cấu hình strict 2026 gắn với monorepo Turborepo hoặc Nx
Mỗi package có tsconfig references; bật composite để incremental. Đồng bộ phiên bản TypeScript trong root để tránh hai package hiểu kiểu khác nhau. Theo dõi thời gian typecheck job sau mỗi lần thêm cờ — nếu vượt ngưỡng, tách job song song theo project graph.
- Điểm 1: Khóa phiên bản TS trong package.json.
- Điểm 2: Dùng path alias có kiểm soát.
- Điểm 3: Viết kiểu cho boundary API rõ ràng.
- Điểm 4: Tránh disable rule toàn repo trừ khi có kế hoạch hạn.
Bảng so sánh: strict ngay từ đầu so với strict dần
Áp dụng cho startup và doanh nghiệp kế thừa code.
| Tiêu chí | Lựa chọn A | Lựa chọn B | Khuyên dự án kế thừa |
|---|---|---|---|
| Chi phí ban đầu | Cao | Thấp hơn theo tuần | B với lộ trình PR nhỏ |
| Ổn định kiểu | Tốt ngay | Tốt dần | Đo metric lỗi runtime |
| Risk merge conflict | Ít hơn khi repo nhỏ | Nhiều hơn trên nhánh dài | Giữ nhánh ngắn |
| Đào tạo team | Dồn đầu | Liên tục | Workshop theo sprint |
Greenfield nên bật strict sớm; brownfield cần chiến lược và bảng ưu tiên.
Quy trình bật cờ strict an toàn
- Bước 1: Chạy tsc hiện tại và lưu số lỗi baseline.
- Bước 2: Bật một cờ, ví dụ strictNullChecks trong package đích.
- Bước 3: Sửa hoặc thu hẹp phạm vi file bằng tsconfig path override cục bộ tạm.
- Bước 4: Merge và quan sát bug tracker tuần sau.
- Bước 5: Lặp cho đến khi đạt cấu hình mục tiêu 2026.
Không lưu baseline thì không biết tiến độ — dễ nản team.
Phương án dịch vụ kiểm tra kiểu cùng Webchốt
Xem dịch vụ chất lượng mã khi muốn rà soát PR kèm guideline strict. Có thể bắt đầu từ template đã cấu hình sẵn baseline. Liên hệ hi@webchot.com hoặc 0905 151 701.
Sai lầm phổ biến khi siết TypeScript
Bốn lỗi làm strict không mang lại giá trị.
- Sai lầm 1: Chỉ dev máy local chạy tsc — CI bỏ qua.
- Sai lầm 2: Dùng any để xóa lỗi nhanh.
- Sai lầm 3: Không đồng bộ phiên bản TS giữa máy và CI.
- Sai lầm 4: Bật strict toàn repo một PR 500 file — khó review.
Đối với package thư viện nội bộ publish ra npm private, hãy bật composite và references để consumer chỉ build phần đụng tới. Khi làm việc với library bên thứ ba thiếu type, viết module augmentation thay vì any — ghi rõ TODO và owner. Sinh viên thực tập vào dự án nên được checklist “không đụng tsconfig flags” trừ khi mentor review — lỗi strict có thể lan rộng. Với dự án hợp tác quốc tế, múi giờ khác nhau có thể khiến merge conflict tích lũy; hãy coi type error trên CI là rào chắn chất lượng, không chỉ ngăn merge. Ghi nhận thời gian typecheck PR trung bình trong retrospect để biết khi nào cần máy runner mạnh hơn.
Với codebase kết hợp JavaScript legacy, hãy dùng allowJs tạm và kế hoạch migrate từng module; strict sẽ không phát huy nếu phần lớn vẫn không kiểu. Khi dùng Prisma hoặc Drizzle, generate type client và tránh hand-write interface trùng lặp — một nguồn sự thật giảm drift. Ghi dashboard số lỗi tsc theo tuần và treo biểu đồ trong retrospective để đội thấy ROI. Nếu CI typecheck vượt 10 phút, cân nhắc sharding theo project graph hoặc máy runner lớn hơn — chờ pipeline quá lâu làm dev bỏ qua chờ local. Cuối cùng, đừng quên update IDE extension TypeScript đồng phiên bản với repo để tránh “xanh local đỏ CI”.
Hãy đặt policy renovate/dependabot cho các package kiểu @types vì chúng có thể làm vỡ build âm thầm. Với worker trong quá trình build, xác nhận RAM CI đủ vì typecheck song song dễ spike bộ nhớ. Ghi ADR khi tắt một rule strict tạm thời để tránh quên vĩnh viễn. Nếu dùng path mapping tới file generate, luôn chạy generate trước tsc trên CI. Khuyến khích hook pre-commit nhưng dùng lint-staged phạm vi nhỏ cho máy yếu.
Khi tích hợp thư viện legacy không có typedefs, cân nhắc viết module declaration riêng trong thư mục được include — đừng phủ `any` rộng khắp project. Với monorepo, đặt `composite` và `references` để incremental build; một đổi nhỏ ở package UI không nên buộc tsc lại toàn backend. Trên Windows dev máy, kiểm tra case path vì macOS không phân biệt hoa thường — TypeScript có thể báo lỗi chỉ trên CI. Ghi rõ phiên bản TypeScript trong engines hoặc volta để máy mới không lệch 5.x so với team. Khi migrate JSX transform, chạy song song report `verbatimModuleSyntax` để thấy import type lệch. SME cần đào tạo đọc lỗi “type narrowing” thay vì copy paste Stack Overflow mù quáng.
Với API public GraphQL, bật strict trên resolver kết hợp codegen giúp schema khớp frontend — lỗi compile rẻ hơn lỗi production. Hãy chạy `tsc --noEmit` trước merge vào main kể cả khi IDE xanh, vì CI có thể có `skipLibCheck` khác local.
Đội làm việc với Next.js nên bật `plugin` trong ESLint để rule `@typescript-eslint` bắt import type — strict không chỉ nằm ở compiler. Khi dùng barrel file, cẩn thận circular import phát hiện muộn: có thể cần tách type sang `types.ts` mỏng. Ghi chú phiên bản Node trên README và trên CI; TypeScript lib DOM khác nhau giữa Node 18 và 20 có thể làm lỗi chỉ xuất hiện một phía. Mỗi quý, dành buổi đọc release note TS để biết `satisfies` hoặc rule inference mới có tối ưu build không. Cuối năm, xóa `// @ts-expect-error` hết hạn để tránh “băng gạc” vĩnh viễn.
FAQ — typescript 5 cấu hình strict 2026
skipLibCheck nên tắt không?
Giữ tạm nếu dependency kéo lỗi kiểu cũ; có kế hoạch thay lib hoặc patch.
verbatimModuleSyntax ảnh hưởng import?
Buộc phân biệt type và value import — dọn import sạch hơn nhưng cần chỉnh CI.
Ảnh hưởng bundle?
TS chỉ build time; output JS phụ thuộc transpile target.
Test jest/ts-jest?
Đồng bộ cấu hình ts-jest với tsconfig project references.
Webchốt có code review TypeScript?
Có thể — gọi 0905 151 701 hoặc email hi@webchot.com.
Liên Hệ Webchốt
typescript 5 cấu hình strict 2026 giúp sản phẩm Next.js bớt "ẩn số" khi deploy. Webchốt hỗ trợ lộ trình và CI. Liên hệ 0905 151 701 hoặc hi@webchot.com.
- Hotline / Zalo: 0905 151 701 — gặp anh Trường (founder/dev).
- Chat Zalo: zalo.me/0905151701 — phản hồi nhanh.
- Email: hi@webchot.com — phản hồi <12h làm việc.
- Studio: 262/1/93 Phan Anh, Phường Phú Thạnh, TP.HCM (T2–T7, 9h–18h).
Tham khảo thêm: 17 template Next.js · 10 dịch vụ web chuyên sâu · bảng giá Webchốt 2026 · 12 công cụ kế toán/tài chính miễn phí.
Reference: Next.js docs · web.dev Core Web Vitals.