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: C; }' is not assignable to type 'R'. Types of property 'oneI' are incompatible. Type 'C' is not assignable to type 'I'. tests/cases/compiler/fuzzy.ts(25,20): error TS2352: Neither type '{ oneI: C; }' nor type 'R' is assignable to the other. Property 'anything' is missing in type '{ oneI: C; }'. ==== 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 ({ anything: 1 }); } doesntWork():R { return { anything:1, oneI:this }; ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2322: Type '{ anything: number; oneI: C; }' is not assignable to type 'R'. !!! error TS2322: Types of property 'oneI' are incompatible. !!! error TS2322: Type 'C' is not assignable to type 'I'. } worksToo():R { return ({ oneI: this }); ~~~~~~~~~~~~~~~~~~~ !!! error TS2352: Neither type '{ oneI: C; }' nor type 'R' is assignable to the other. !!! error TS2352: Property 'anything' is missing in type '{ oneI: C; }'. } } }