Closed
Description
Bug Report
π Search Terms
typescript union typed narrowing lost in closures
type narrowing closures
π Version & Regression Information
Typescript versions 4.4.3 and still exists on Nightly 4.5.0-dev
β― Playground Link
Playground link with relevant code
π» Code
type MyUnion = { type: 'left', propertyExistsOnLeft: string } | { type: 'right', propertyExistsOnRight: string }
let x = {} as MyUnion;
switch (x.type) {
case 'left':
const y = x.propertyExistsOnLeft; //all good here ...
console.log(() => x.propertyExistsOnLeft) //showing error "Property 'propertyExistsOnLeft' does not exist on type 'MyUnion'"
break;
}
π Actual behavior
Type narrowing is working as expected when following control flow, however when the variable is used inside a closures scope (arrow functions or normal functions) it reverts back to it's declared type losing all narrowing inferred from the containing scope.
π Expected behavior
Type narrowing should continue to work inside the context of closures.