Strict mode
| strict:true | |
| strictNullChecks | |
| noUncheckedIndexedAccess | |
| Adopt file by file |
strict:true
One flag turns on the whole strict family at once. New projects should start with it enabled, because every strict error is a runtime crash avoided.
The command below checks the current project with full strictness without writing any files.
tsc --strict --noEmit
strict errors are reported, nothing is written
strictNullChecks
Without null checks, null and undefined hide inside every type. With the flag on, a value that may be missing must be declared and handled before use.
Narrow first, then act. An early return for the empty case keeps the happy path clean and fully typed.
function greet(name: string | null): string {
if (name === null) {
return "Guest";
}
return name.toUpperCase();
}
noUncheckedIndexedAccess
Array access looks safe but can read past the end. This flag adds undefined to every index read, so the checker forces a guard for missing elements.
The extra check feels noisy for a week and then becomes a habit. Out of range reads turn into compile errors instead of silent undefined values.
const scores: number[] = [10, 20];
const first = scores[0];
if (first !== undefined) {
console.log(first * 2);
}
Adopt file by file
Turning strict on for a large old codebase can flood the terminal with errors. Adopt it in slices instead of one painful rewrite.
Enable strict in the config, fix one folder, and keep new files strict from day one. The error count drops steadily while the code keeps shipping.
{
"compilerOptions": {
"strict": true,
"noUncheckedIndexedAccess": true
}
}
Next: Source maps
Article author: Arthur Isaev