A project with no strict setting may start reporting nullable values, implicit any, or uninitialized fields after TypeScript 6. The compiler did not suddenly misunderstand the code; the default safety level changed.
The useful question is not whether the release sounds modern. It is whether the changed default or capability affects the way your project installs, compiles, resolves modules, or runs in production.
Quick answer
Add strict: true explicitly, capture the complete error list, and fix high-risk boundaries first. If the migration must be staged, disable individual checks temporarily instead of turning the entire strict family off.
{
"compilerOptions": {
"strict": true,
"useUnknownInCatchVariables": true
}
}
what changed
strict now defaults to true. Projects already setting it see no difference, while configurations that relied on the previous false default receive the full strict family of checks.
This is a version-specific change. Pin the tool or runtime while migrating so a teammate and CI do not test a different contract by accident.
where teams will notice it
Request parsing, database lookups, environment variables, and external API responses usually produce the most valuable errors because these are places where values can be absent or malformed at runtime.
A small smoke test is more useful than assuming the changelog covers your architecture. Reproduce the workflow from a clean checkout with the same command production uses.
a safe migration
- Commit an explicit strict setting.
- Group errors by boundary and risk.
- Add runtime validation where data is untrusted.
- Remove temporary exceptions as each module is migrated.
Change one resolution or security boundary at a time. That keeps failures attributable and makes rollback straightforward.
the mistake to avoid
Do not replace every error with as any or non-null assertions. That preserves compilation by deleting the information strict mode surfaced.
Avoid broad compatibility switches unless they are temporary, documented, and assigned a removal date. A migration that merely hides the warning will return as a harder TypeScript, Node, or npm upgrade later.
how to verify the result
Run type checking with a clean build and exercise the corrected null/error paths in tests. The migration is complete when the runtime behavior is proven, not only when the error count reaches zero.
Record the tool version and verification command in the pull request. That gives reviewers evidence and gives the next upgrade a known baseline.
rollout note
Ship the change in a small pull request that records the old behavior, the new behavior, and the rollback command. For an application, test the production image rather than only the developer machine. For a library, install the packed tarball in a tiny consumer project. Keep the previous lockfile or compiler configuration available until CI, deployment, and one real workflow have all passed.
That evidence makes the upgrade reviewable. It also prevents a later failure from being blamed vaguely on the entire major release when one setting or experimental flag was responsible.
official reference
Check the linked documentation again before upgrading production. Current-release features and announced security timelines can change in later patch releases.