Closed
Description
openedon Sep 28, 2021
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment