//// [typeParameterUsedAsTypeParameterConstraint4.ts] // Type parameters are in scope in their own and other type parameter lists // Some negative cases class C { z: W; // error foo(x: W): T { var r: T; return x; } } interface I { x: T; y: U; z: W; // error foo(x: W): T; } function foo(x: T, y: U): V { // error function bar(): X { // error function baz(a: X, b: Y): T { x = y; return y; } } } function foo2(x: T, y: U): W { // error function bar(): Y { // error function baz(a: X, b: Y): T { x = y; return y; } } } var f3 = (x: T, y: U) => { function bar(r: X, s: Y) { // error var g = (a: X, b: Y): T => { x = y; return y; } } } var f4 = (x: V, y: X) => { // error function bar() { var g = (a: X, b: Y): T => { x = y; return y; } } } //// [typeParameterUsedAsTypeParameterConstraint4.js] // Type parameters are in scope in their own and other type parameter lists // Some negative cases var C = (function () { function C() { } C.prototype.foo = function (x) { var r; return x; }; return C; })(); function foo(x, y) { function bar() { function baz(a, b) { x = y; return y; } } } function foo2(x, y) { function bar() { function baz(a, b) { x = y; return y; } } } var f3 = function (x, y) { function bar(r, s) { var g = function (a, b) { x = y; return y; }; } }; var f4 = function (x, y) { function bar() { var g = function (a, b) { x = y; return y; }; } };