"strict": true in tsconfig.json attiva un insieme di controlli più rigorosi contemporaneamente. È fortemente consigliato per tutti i nuovi progetti — cattura i bug che TypeScript esiste per prevenire.
// strictNullChecks — null/undefined are no longer assignable to everything
let name: string = null; // ❌ Error (without strict this compiles, then crashes)
function f(u?: User) { u.name; } // ❌ u is possibly undefined → forces a check
// noImplicitAny — parameters with no inferable type must be annotated
function g(x) {} // ❌ Error: 'x' implicitly has type 'any'
// strictPropertyInitialization — class fields must be initialized
class C { name: string; } // ❌ must init in constructor or mark optional
strictNullChecks è quello importante: separa null/undefined da altri tipi, quindi il compilatore ti forza a gestire "potrebbe mancare" ovunque — eliminando la classe #1 di errori di runtime ("non può leggere la proprietà di undefined").
Attiva i flag in modo incrementale (strictNullChecks per primo), correggi gli errori file per file, piuttosto che abilitare tutto in una volta su un grande progetto legacy.
Senza modalità rigorosa, TypeScript consente comunque molti dei pattern non sicuri che è destinato a prevenire (implicit any, null non controllati).
La modalità rigorosa è dove TypeScript fornisce la maggior parte del suo valore — trattala come predefinita e rilassa i singoli flag solo con una buona ragione.