"strict: true is a meta-flag. Seven checks turn on as one."
The family
"strict": true in tsconfig.json turns on seven separate strictness flags simultaneously:
noImplicitAnystrictNullChecksstrictFunctionTypesstrictBindCallApplystrictPropertyInitializationnoImplicitThisuseUnknownInCatchVariables
Each is meaningful on its own; turning them all on together is the default for new TypeScript projects in 2026.
Why all together
The seven flags catch different kinds of latent type weakness. Turning on one but not the others leaves gaps. The recommended posture is strict: true from day one — every flag, no exceptions.
For projects that can't go full strict (legacy code, gradual migration), you can opt out of individual flags one at a time. The general direction should always be toward more strict, not less.
strict isn't the end
Three additional flags catch things even strict: true misses:
noUncheckedIndexedAccess— types index access asT | undefinedexactOptionalPropertyTypes— distinguishes missing from explicit undefinednoImplicitReturns— functions must return something on every code path
For new projects, turn these on too. The @tsconfig/strictest base includes all of them.