@typedef {NS.foo} doesn't really make sense in this context. It's a bit subtle, because @typedef accepts a type expression, and you're expecting it to be a reference expression.
if {NS.foo} was a reference expression, it would refer to the function assigned to NS.foo.
but because {NS.foo} is a expression, it refers to an *instance* of NS.foo (which is not possible, because NS.foo is not a constructor).
does that make sense?
in this particular case, the only real solution is to repeat the annotation i think.