Skip to content

Narrowed union types loosened within closures #19683

@myitcv

Description

@myitcv

This could be a dup of #14748; they seem related

TypeScript Version: 2.7.0-dev.20171102

Code

See in playground

class A { 
    name: string;
}
class B { 
    age: number;
}

let x: A | B;

if (x instanceof A) {
    console.log(x.name); // ok: x has type A

    setTimeout(() => {
        console.log(x.name); // ** COMPILE ERROR: x has type A | B here
    });
} else {
    console.log(x.age); // ok: x has type B here

    setTimeout(() => {
        console.log(x.age); // ** COMPILE ERROR: x has type A | B here
    });
}

Expected behavior:

This should compile.

Actual behavior:

It does not compile

Metadata

Metadata

Assignees

No one assigned

    Labels

    DuplicateAn existing issue was already created

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions