tests/cases/compiler/fuzzy.ts(13,18): error TS2420: Class 'C' incorrectly implements interface 'I'.
  Property 'alsoWorks' is missing in type 'C'.
tests/cases/compiler/fuzzy.ts(21,20): error TS2322: Type '{ anything: number; oneI: this; }' is not assignable to type 'R'.
  Types of property 'oneI' are incompatible.
    Type 'this' is not assignable to type 'I'.
      Type 'C' is not assignable to type 'I'.
tests/cases/compiler/fuzzy.ts(25,20): error TS2352: Neither type '{ oneI: this; }' nor type 'R' is assignable to the other.
  Property 'anything' is missing in type '{ oneI: this; }'.


==== tests/cases/compiler/fuzzy.ts (3 errors) ====
    module M {
        export interface I {
            works:()=>R;
            alsoWorks:()=>R;
            doesntWork:()=>R;
        }
    
        export interface R {
            anything:number;
            oneI:I;
        }
    
        export class C implements I {
                     ~
!!! error TS2420: Class 'C' incorrectly implements interface 'I'.
!!! error TS2420:   Property 'alsoWorks' is missing in type 'C'.
            constructor(public x:number) {
            }
            works():R {
                return <R>({ anything: 1 });
            }
    
            doesntWork():R {
                return { anything:1, oneI:this };
                       ~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS2322: Type '{ anything: number; oneI: this; }' is not assignable to type 'R'.
!!! error TS2322:   Types of property 'oneI' are incompatible.
!!! error TS2322:     Type 'this' is not assignable to type 'I'.
!!! error TS2322:       Type 'C' is not assignable to type 'I'.
            }
    
            worksToo():R {
                return <R>({ oneI: this });
                       ~~~~~~~~~~~~~~~~~~~
!!! error TS2352: Neither type '{ oneI: this; }' nor type 'R' is assignable to the other.
!!! error TS2352:   Property 'anything' is missing in type '{ oneI: this; }'.
            }
        }
    }
    
    