O que `strict: true` liga, e por que vale a pena
Pergunta
O que a flag `strict` do TypeScript ativa, e por que times a ligam mesmo custando esforço num código legado?
Resposta esperada
`strict: true` liga um conjunto: `strictNullChecks` (o mais impactante — `null`/`undefined` deixam de ser atribuíveis a qualquer tipo, você é forçado a tratar), `noImplicitAny` (parâmetro/variável sem tipo inferível vira erro em vez de virar `any` silencioso), `strictFunctionTypes`, `strictPropertyInitialization` (campo de classe tem que ser inicializado), `strictBindCallApply`, `alwaysStrict`, `useUnknownInCatchVariables`. Vale a pena porque a maioria dos bugs que TS pega de verdade — 'cannot read property of undefined' — só aparece com `strictNullChecks`; sem ele, o compilador te dá uma falsa sensação de segurança. Migração de legado: liga `strict` com `// @ts-expect-error`/`strictNullChecks` por diretório, ou usa `--strict` só em arquivos novos, e vai reduzindo a dívida. O custo é real mas único; o benefício é contínuo.
Por que perguntam isso
Pergunta pleno de TS. Sinal de domínio: destacar `strictNullChecks` como o que realmente muda o jogo, e ter um plano de migração pra legado.