"strict": true trong tsconfig.json bật cùng lúc một nhóm các kiểm tra nghiêm ngặt hơn. Nó được khuyến nghị mạnh mẽ cho tất cả dự án mới — nó bắt được chính những bug mà TypeScript sinh ra để ngăn chặn.
{ "compilerOptions": { "strict": true } }
"strict": true trong tsconfig.json bật cùng lúc một nhóm các kiểm tra nghiêm ngặt hơn. Nó được khuyến nghị mạnh mẽ cho tất cả dự án mới — nó bắt được chính những bug mà TypeScript sinh ra để ngăn chặn.
{ "compilerOptions": { "strict": true } }
// strictNullChecks — null/undefined không còn gán được cho mọi thứ
let name: string = null; // ❌ Lỗi (không có strict thì compile được, rồi crash)
function f(u?: User) { u.name; } // ❌ u có thể undefined → buộc kiểm tra
// noImplicitAny — tham số không infer được kiểu phải được annotate
function g(x) {} // ❌ Lỗi: 'x' ngầm có kiểu 'any'
// strictPropertyInitialization — field của class phải được khởi tạo
class C { name: string; } // ❌ phải init trong constructor hoặc đánh dấu optional
strictNullChecks là flag quan trọng nhất: nó tách null/undefined ra khỏi các kiểu khác, nên compiler buộc bạn xử lý trường hợp "có thể thiếu" ở mọi nơi — loại bỏ nhóm lỗi runtime số 1 ("cannot read property of undefined").
Bật từng flag một cách dần dần (strictNullChecks trước), sửa lỗi từng file một, thay vì bật tất cả cùng lúc trên một dự án legacy lớn.
Không có strict mode, TypeScript vẫn cho phép nhiều pattern không an toàn mà nó được tạo ra để ngăn chặn (implicit any, null không được kiểm tra).
Strict mode là nơi TypeScript mang lại phần lớn giá trị của nó — hãy coi nó là mặc định và chỉ nới lỏng từng flag riêng lẻ khi có lý do chính đáng.