=== tests/cases/conformance/classes/members/privateNames/privateNamesInGenericClasses.ts === class C { >C : C #foo: T; >#foo : T #method(): T { return this.#foo; } >#method : () => T >this.#foo : T >this : this get #prop(): T { return this.#foo; } >#prop : T >this.#foo : T >this : this set #prop(value : T) { this.#foo = value; } >#prop : T >value : T >this.#foo = value : T >this.#foo : T >this : this >value : T bar(x: C) { return x.#foo; } // OK >bar : (x: C) => T >x : C >x.#foo : T >x : C bar2(x: C) { return x.#method(); } // OK >bar2 : (x: C) => T >x : C >x.#method() : T >x.#method : () => T >x : C bar3(x: C) { return x.#prop; } // OK >bar3 : (x: C) => T >x : C >x.#prop : T >x : C baz(x: C) { return x.#foo; } // OK >baz : (x: C) => number >x : C >x.#foo : number >x : C baz2(x: C) { return x.#method; } // OK >baz2 : (x: C) => () => number >x : C >x.#method : () => number >x : C baz3(x: C) { return x.#prop; } // OK >baz3 : (x: C) => number >x : C >x.#prop : number >x : C quux(x: C) { return x.#foo; } // OK >quux : (x: C) => string >x : C >x.#foo : string >x : C quux2(x: C) { return x.#method; }// OK >quux2 : (x: C) => () => string >x : C >x.#method : () => string >x : C quux3(x: C) { return x.#prop; } // OK >quux3 : (x: C) => string >x : C >x.#prop : string >x : C } declare let a: C; >a : C declare let b: C; >b : C a.#foo; // Error >a.#foo : any >a : C a.#method; // Error >a.#method : any >a : C a.#prop; // Error >a.#prop : any >a : C a = b; // Error >a = b : C >a : C >b : C b = a; // Error >b = a : C >b : C >a : C