None of these are part of strict, and none are on by default (a strict-only config accepted every violation in the example below on 5.9.3 and 7.0.2). I add them deliberately.
noUncheckedIndexedAccess(4.1). Reading through an index signature or an array index adds| undefined:nums[0]isnumber | undefined. It is the most valuable one, because out-of-range reads are a real runtime source ofundefinedthatstrictNullCheckscannot see. Cost: you narrow or use??at each read. Tuple positions andfor...ofelements are unaffected;.at()already returnsT | undefined.exactOptionalPropertyTypes(4.4).theme?: "dark" | "light"then means "absent or one of these", not "orundefined". Writing{ theme: undefined }is an error. Turn it on when presence matters at runtime (in,Object.keys, spread). The 4.4 notes warn of friction with existing typings; it requiresstrictNullChecks.noImplicitOverride(4.3). A method that overrides a base member must sayoverride, so renaming a base method breaks subclasses visibly instead of silently orphaning them.overrideon a member the base lacks is an error with or without the flag.noImplicitReturns. Every code path must return a value when any path does.noFallthroughCasesInSwitch. A non-emptycasemustbreak,returnorthrow.noPropertyAccessFromIndexSignature(4.2). Index-signature keys needobj["key"], which signals "might be absent". It is a style flag.
I leave noUnusedLocals and noUnusedParameters to the linter, which can auto-fix and can be set per rule.