-
Notifications
You must be signed in to change notification settings - Fork 13.2k
Closed
Labels
DuplicateAn existing issue was already createdAn existing issue was already created
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.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
DuplicateAn existing issue was already createdAn existing issue was already created