tests/cases/compiler/inKeywordTypeguard.ts(6,11): error TS2339: Property 'b' does not exist on type 'A'.
tests/cases/compiler/inKeywordTypeguard.ts(8,11): error TS2339: Property 'a' does not exist on type 'B'.
tests/cases/compiler/inKeywordTypeguard.ts(14,11): error TS2339: Property 'b' does not exist on type 'A'.
tests/cases/compiler/inKeywordTypeguard.ts(16,11): error TS2339: Property 'a' does not exist on type 'B'.
tests/cases/compiler/inKeywordTypeguard.ts(27,11): error TS2339: Property 'b' does not exist on type 'AWithOptionalProp | BWithOptionalProp'.
  Property 'b' does not exist on type 'AWithOptionalProp'.
tests/cases/compiler/inKeywordTypeguard.ts(42,11): error TS2339: Property 'b' does not exist on type 'AWithMethod'.
tests/cases/compiler/inKeywordTypeguard.ts(49,11): error TS2339: Property 'a' does not exist on type 'never'.
tests/cases/compiler/inKeywordTypeguard.ts(50,11): error TS2339: Property 'b' does not exist on type 'never'.
tests/cases/compiler/inKeywordTypeguard.ts(52,11): error TS2339: Property 'a' does not exist on type 'AWithMethod | BWithMethod'.
  Property 'a' does not exist on type 'BWithMethod'.
tests/cases/compiler/inKeywordTypeguard.ts(53,11): error TS2339: Property 'b' does not exist on type 'AWithMethod | BWithMethod'.
  Property 'b' does not exist on type 'AWithMethod'.
tests/cases/compiler/inKeywordTypeguard.ts(62,11): error TS2339: Property 'b' does not exist on type 'A | C | D'.
  Property 'b' does not exist on type 'A'.
tests/cases/compiler/inKeywordTypeguard.ts(64,11): error TS2339: Property 'a' does not exist on type 'B'.
tests/cases/compiler/inKeywordTypeguard.ts(72,32): error TS2339: Property 'b' does not exist on type 'A'.
tests/cases/compiler/inKeywordTypeguard.ts(74,32): error TS2339: Property 'a' does not exist on type 'B'.
tests/cases/compiler/inKeywordTypeguard.ts(82,39): error TS2339: Property 'b' does not exist on type 'A'.
tests/cases/compiler/inKeywordTypeguard.ts(84,39): error TS2339: Property 'a' does not exist on type 'B'.
tests/cases/compiler/inKeywordTypeguard.ts(94,26): error TS2339: Property 'a' does not exist on type 'never'.
tests/cases/compiler/inKeywordTypeguard.ts(103,13): error TS2322: Type '{ a: string; } & { b: string; }' is not assignable to type 'never'.


==== tests/cases/compiler/inKeywordTypeguard.ts (18 errors) ====
    class A { a: string; }
    class B { b: string; }
    
    function negativeClassesTest(x: A | B) {
        if ("a" in x) {
            x.b = "1";
              ~
!!! error TS2339: Property 'b' does not exist on type 'A'.
        } else {
            x.a = "1";
              ~
!!! error TS2339: Property 'a' does not exist on type 'B'.
        }
    }
    
    function positiveClassesTest(x: A | B) {
        if ("a" in x) {
            x.b = "1";
              ~
!!! error TS2339: Property 'b' does not exist on type 'A'.
        } else {
            x.a = "1";
              ~
!!! error TS2339: Property 'a' does not exist on type 'B'.
        }
    }
    
    class AWithOptionalProp { a?: string; }
    class BWithOptionalProp { b?: string; }
    
    function positiveTestClassesWithOptionalProperties(x: AWithOptionalProp | BWithOptionalProp) {
        if ("a" in x) {
            x.a = "1";
        } else {
            x.b = "1";
              ~
!!! error TS2339: Property 'b' does not exist on type 'AWithOptionalProp | BWithOptionalProp'.
!!! error TS2339:   Property 'b' does not exist on type 'AWithOptionalProp'.
        }
    }
    
    class AWithMethod {
        a(): string { return ""; }
    }
    
    class BWithMethod {
        b(): string { return ""; }
    }
    
    function negativeTestClassesWithMembers(x: AWithMethod | BWithMethod) {
        if ("a" in x) {
            x.a();
            x.b();
              ~
!!! error TS2339: Property 'b' does not exist on type 'AWithMethod'.
        } else {
        }
    }
    
    function negativeTestClassesWithMemberMissingInBothClasses(x: AWithMethod | BWithMethod) {
        if ("c" in x) {
            x.a();
              ~
!!! error TS2339: Property 'a' does not exist on type 'never'.
            x.b();
              ~
!!! error TS2339: Property 'b' does not exist on type 'never'.
        } else {
            x.a();
              ~
!!! error TS2339: Property 'a' does not exist on type 'AWithMethod | BWithMethod'.
!!! error TS2339:   Property 'a' does not exist on type 'BWithMethod'.
            x.b();
              ~
!!! error TS2339: Property 'b' does not exist on type 'AWithMethod | BWithMethod'.
!!! error TS2339:   Property 'b' does not exist on type 'AWithMethod'.
        }
    }
    
    class C { a: string; }
    class D { a: string; }
    
    function negativeMultipleClassesTest(x: A | B | C | D) {
        if ("a" in x) {
            x.b = "1";
              ~
!!! error TS2339: Property 'b' does not exist on type 'A | C | D'.
!!! error TS2339:   Property 'b' does not exist on type 'A'.
        } else {
            x.a = "1";
              ~
!!! error TS2339: Property 'a' does not exist on type 'B'.
        }
    }
    
    class ClassWithUnionProp { prop: A | B }
    
    function negativePropTest(x: ClassWithUnionProp) {
        if ("a" in x.prop) {
            let y: string = x.prop.b;
                                   ~
!!! error TS2339: Property 'b' does not exist on type 'A'.
        } else {
            let z: string = x.prop.a;
                                   ~
!!! error TS2339: Property 'a' does not exist on type 'B'.
        }
    }
    
    class NegativeClassTest {
        protected prop: A | B;
        inThis() {
            if ("a" in this.prop) {
                let z: number = this.prop.b;
                                          ~
!!! error TS2339: Property 'b' does not exist on type 'A'.
            } else {
                let y: string = this.prop.a;
                                          ~
!!! error TS2339: Property 'a' does not exist on type 'B'.
            }
        }
    }
    
    class UnreachableCodeDetection {
        a: string;
        inThis() {
            if ("a" in this) {
            } else {
                let y = this.a;
                             ~
!!! error TS2339: Property 'a' does not exist on type 'never'.
            }
        }
    }
    
    function positiveIntersectionTest(x: { a: string } & { b: string }) {
        if ("a" in x) {
            let s: string = x.a;
        } else {
            let n: never = x;
                ~
!!! error TS2322: Type '{ a: string; } & { b: string; }' is not assignable to type 'never'.
        }
    }
    