interface Comparable { compareTo(other: T): number; } interface I { x: Comparable; } interface K { x: A; } class A implements Comparable { compareTo(other: T) { return 1; } } var z = { x: new A() }; var a1: I = { x: new A() }; var a2: I = function (): { x: A } { var z = { x: new A() }; return z; } (); var a3: I = z; var a4: I = >z;