//// [tests/cases/conformance/declarationEmit/typePredicates/declarationEmitThisPredicates02.ts] ////

=== declarationEmitThisPredicates02.ts ===
export interface Foo {
>Foo : Symbol(Foo, Decl(declarationEmitThisPredicates02.ts, 0, 0))

    a: string;
>a : Symbol(Foo.a, Decl(declarationEmitThisPredicates02.ts, 0, 22))

    b: number;
>b : Symbol(Foo.b, Decl(declarationEmitThisPredicates02.ts, 1, 14))

    c: boolean;
>c : Symbol(Foo.c, Decl(declarationEmitThisPredicates02.ts, 2, 14))
}

export const obj = {
>obj : Symbol(obj, Decl(declarationEmitThisPredicates02.ts, 6, 12))

    m(): this is Foo {
>m : Symbol(m, Decl(declarationEmitThisPredicates02.ts, 6, 20))
>Foo : Symbol(Foo, Decl(declarationEmitThisPredicates02.ts, 0, 0))

        let dis = this as {} as Foo;
>dis : Symbol(dis, Decl(declarationEmitThisPredicates02.ts, 8, 11))
>this : Symbol(obj, Decl(declarationEmitThisPredicates02.ts, 6, 18))
>Foo : Symbol(Foo, Decl(declarationEmitThisPredicates02.ts, 0, 0))

        return dis.a != null && dis.b != null && dis.c != null;
>dis.a : Symbol(Foo.a, Decl(declarationEmitThisPredicates02.ts, 0, 22))
>dis : Symbol(dis, Decl(declarationEmitThisPredicates02.ts, 8, 11))
>a : Symbol(Foo.a, Decl(declarationEmitThisPredicates02.ts, 0, 22))
>dis.b : Symbol(Foo.b, Decl(declarationEmitThisPredicates02.ts, 1, 14))
>dis : Symbol(dis, Decl(declarationEmitThisPredicates02.ts, 8, 11))
>b : Symbol(Foo.b, Decl(declarationEmitThisPredicates02.ts, 1, 14))
>dis.c : Symbol(Foo.c, Decl(declarationEmitThisPredicates02.ts, 2, 14))
>dis : Symbol(dis, Decl(declarationEmitThisPredicates02.ts, 8, 11))
>c : Symbol(Foo.c, Decl(declarationEmitThisPredicates02.ts, 2, 14))
    }
}
