For the first one: It's not an issue in JavaScript because there isn't some compiler telling me yeah that's fine, I have to confirm myself.
For the second one: I know it is shadowing, what I mean is I find commonly that I'd like to have it in Typescript as well. In JavaScript is not necessary since I can just use the same variable.
For the third one: If I have some string variable that needs to be created from either one set of instructions or another, in Rust I do exactly that:
let foo = if x { ... } else { ... }
In ts your options are making it mutable undefined and mutate it inside the if else, using a very weird unreadable ternary, using an IIFE that returns into the constant, or creating extra functions to move the logic out. None of these are even close in readability, locality, or soundness to the rust example.
I find the _combination_ of those things that make it harder to write ts than js.