interface I { xs: Array; } interface J { f(): J; } class C { xs: Array; f(): C { return this; } } function foo(c: C): I { return c; } function bar(c: C): J { return c; }