// @declaration: true type T1 = { x: T1["x"]; // Error }; type T2 = { x: T2[K]; // Error y: number; } declare let x2: T2<"x">; let x2x = x2.x; interface T3> { x: T["x"]; } interface T4> { x: T4["x"]; // Error } class C1 { x: C1["x"]; // Error } class C2 { x: this["y"]; y: this["z"]; z: this["x"]; } // Repro from #12627 interface Foo { hello: boolean; } function foo() { }