==== tests/cases/conformance/types/typeParameters/typeParameterLists/propertyAccessOnTypeParameterWithConstraints3.ts (6 errors) ==== // generic types should behave as if they have properties of their constraint type class A { foo(): string { return ''; } } class B extends A { bar(): string { return ''; } } class C { ~~~~~~~~~~~ !!! Constraint of a type parameter cannot reference any type parameter from the same type parameter list. f() { var x: T; // BUG 823818 var a = x['foo'](); // should be string return a + x.foo(); } g(x: U) { // BUG 823818 var a = x['foo'](); // should be string return a + x.foo(); } } var r1a = (new C()).f(); var r1b = (new C()).g(new B()); interface I { ~~~~~~~~~~~ !!! Constraint of a type parameter cannot reference any type parameter from the same type parameter list. foo: T; } var i: I; var r2 = i.foo.foo(); var r2b = i.foo['foo'](); var a: { (): T; ~~~~~~~~~~~ !!! Constraint of a type parameter cannot reference any type parameter from the same type parameter list. (x: U): U; ~~~~~~~~~~~ !!! Constraint of a type parameter cannot reference any type parameter from the same type parameter list. } var r3 = a().foo(); // error, no inferences for U so it doesn't satisfy constraint ~~~ !!! Property 'foo' does not exist on type '{}'. var r3b = a()['foo'](); // parameter supplied for type argument inference for U var r3c = a(new B()).foo(); // valid call to an invalid function, U is inferred as B, which has a foo var r3d = a(new B())['foo'](); // valid call to an invalid function, U is inferred as B, which has a foo var b = { foo: (x: T) => { ~~~~~~~~~~~ !!! Constraint of a type parameter cannot reference any type parameter from the same type parameter list. // BUG 823818 var a = x['foo'](); // should be string return a + x.foo(); } } var r4 = b.foo(new B()); // valid call to an invalid function