Ran across some interesting differences between docs on this very common question.
According to the TS docs, variables declared with varwill leak out of the containing function, but on MSDN it states the var data will not leak and instead is accessible throughout the containing function. This may be just a difference in how Typescript handles var compared to how ECMAScript does, looking to SO for feedback on this.
Block-scoping When a variable is declared using let, it uses what some call lexical-scoping or block-scoping. Unlike variables declared with var whose scopes leak out to their containing function, block-scoped variables are not visible outside of their nearest containing block or for-loop.
But according to the MSDN docs
Variables declared by let have their scope in the block for which they are defined, as well as in any contained sub-blocks. In this way, let works very much like var. The main difference is that the scope of a var variable is the entire enclosing function: