interface I1 { x: this; f(x: this): this; } interface I2 { (x: this): this; new (x: this): this; [x: string]: this; } interface Foo { x: T; y: this; } interface I3 { a: this[]; b: [this, this]; c: this | Date; d: this & Date; e: (((this))); f: (x: this) => this; g: new (x: this) => this; h: Foo; i: Foo this)>; j: (x: any) => x is this; }