"strict": true em tsconfig.json ativa uma família de verificações mais rigorosas de uma vez. É fortemente recomendado para todos os novos projetos — ele captura os bugs que TypeScript existe para prevenir.
// 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 é o grande: separa null/undefined de outros tipos, então o compilador força você a lidar com "pode estar faltando" em todos os lugares — eliminando a classe #1 de erros em tempo de execução ("cannot read property of undefined").
Ative sinalizadores incrementalmente (strictNullChecks primeiro), corrija erros arquivo por arquivo, em vez de ativar tudo de uma vez em um grande projeto legado.
Sem strict mode, TypeScript ainda permite muitos dos padrões inseguros que deveria prevenir (implicit any, nulls não verificados).
Strict mode é onde TypeScript oferece a maior parte de seu valor — trate como padrão e apenas relaxe sinalizadores individuais com bom motivo.