> but the types in TS are always _logically_ correct. As in absolutely correct
Erm...
type Test = Array<number>;
const xs: Test = [];
const x = xs[0];
What's the type of x, according to typescript's default behavior? It's number [0]. What's the logically correct type? Some sort of a Maybe<number>, which typescript doesn't have; so a number|undefined instead. Most people don't use typescript at that level of soundness, both because it would be painful, and because typescript doesn't have it as a default.
[0] - https://www.typescriptlang.org/play?#code/C4TwDgpgBAKhDOwoF4...