"strict": true bật một nhóm cờ kiểm tra chặt cùng lúc:
json
{
"compilerOptions": {
"strict": true
// bật kèm: strictNullChecks, noImplicitAny, strictFunctionTypes,
// strictBindCallApply, strictPropertyInitialization, noImplicitThis,
// alwaysStrict, useUnknownInCatchVariables (TS 4.4+),
// strictBuiltinIteratorReturn (TS 5.6+)
}
}Hai cờ có tác động lớn nhất:
typescript
// strictNullChecks — cờ giá trị nhất trong cả nhóm
function len(s: string | null) {
return s.length // Lỗi: 's' is possibly 'null'
}
// noImplicitAny — không cho tham số lọt qua mà không có kiểu
function f(x) { } // Lỗi: Parameter 'x' implicitly has an 'any' typeuseUnknownInCatchVariables (TS 4.4) hay gây bối rối khi nâng cấp dự án cũ:
typescript
try { risky() }
catch (e) {
e.message // Lỗi: 'e' is of type 'unknown'
if (e instanceof Error) e.message // đúng
}Chuyển dự án JavaScript sang TypeScript thì bật dần, không bật hết một lần:
json
{ "noImplicitAny": true } // bước 1
{ "strictNullChecks": true } // bước 2 — nặng nhất, làm sau cùngChốt: dự án mới luôn bật strict: true ngay từ đầu.
Bật sau khi đã có hàng nghìn dòng code sẽ sinh ra hàng trăm lỗi cùng lúc, và phần lớn dự án chọn cách tắt đi thay vì sửa — đó là lúc TypeScript mất phần lớn giá trị của nó.