Why wouldn't `let` be exactly what you want? It's block scoped but doesn't need fancy TDZ checks because like `var` it just starts out as undefined.
Consider
console.log(foo)
let foo
vs console.log(foo)
var foo
I think the article confuses "in scope" with "declared", and "declared and initialised" with "initialised".