Interesting! I don't really know but JavaScript's null is actually an object (thanks to its legacy of trying to superficially copy Java). It's essentially meant to mean "an empty object" (not to be confused with actual {})
My guess is that this is an interesting intersection between TS and JS. null is an empty object in JavaScript and {} is simply an object with no fields. But in TypeScript we use structural typing like set theory. So it likely treats null and {} the same?
The difference (if I'm right) is similar to why {} extends {} in TS but {} !== {} in JS.
Totally just a guess though and it doesn't explain why we get this result. Would love someone more knowledgeable to answer. Maybe it's something specific to when you try to actually access a field on null ?