TypeScript strictness is non-monotonic: strict-null-checks and no-implicit-any interact

The TypeScript compiler options strictNullChecks and noImplicitAny interact in a strange way: enabling just strictNullChecks leads to type errors that disappear after enabling noImplicitAny too, meaning getting stricter has fewer errors! This is a low-consequence curiosity, but I did trip over it in the real world, while updating some modules at work to be stricter. The context TypeScript is a…