StrictNullChecks and throw/return with incorrect when used with closure scope · Issue #13572 · microsoft/TypeScript (original) (raw)
TypeScript Version: 2.1.5
Code
function other() { return new Promise((resolve, reject) => { resolve("OK!"); }); }
function test(hosts: {whatever: boolean}[]) { let host = hosts.filter((f) => f.whatever).shift();
if (!host) { throw new Error("Crap!"); }
return other().then(() => {
console.log(${host.whatever} selected
);
});
}
Expected behavior:
Do not emit an error about host
possibly being null, since the method exits early if that's the case.
Actual behavior:
Typically when using strictnullchecks
Typescript is intelligent enough to understand that when you throw an error from a method based on a type check/guard it narrows the type after the statement. As indicated in this short example:
function test(hosts: {whatever: boolean}[]) { let host = hosts.filter((f) => f.whatever).shift();
// Correctly calls out hose as possibly being null
console.log(${host.whatever} selected
);
if (!host) { throw new Error("Crap!"); }
// Does not complain here because of the above check/throw
console.log(${host.whatever} selected
);
}
For some reason when you add the return of the function and use host
through a closure it starts complaining.
I'm sure it's the closure, but I don't see how this could error.