=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/typeParametersAreIdenticalToThemselves.ts === // type parameters from the same declaration are identical to themself function foo1(x: T); >foo1 : { (x: T): any; (x: T): any; } >T : T >x : T >T : T function foo1(x: T); // no error, different declaration for each T >foo1 : { (x: T): any; (x: T): any; } >T : T >x : T >T : T function foo1(x: T) { } >foo1 : { (x: T): any; (x: T): any; } >T : T >x : T >T : T function foo2(x: T); >foo2 : { (x: T): any; (x: T): any; } >T : T >U : U >x : T >T : T function foo2(x: T); // no error, different declaration for each T >foo2 : { (x: T): any; (x: T): any; } >T : T >U : U >x : T >T : T function foo2(x: T) { } >foo2 : { (x: T): any; (x: T): any; } >T : T >U : U >x : T >T : T function foo3(x: T, y: U) { >foo3 : (x: T, y: U) => void >T : T >U : U >x : T >T : T >y : U >U : U function inner(x: T); >inner : { (x: T): any; (x: T): any; } >x : T >T : T function inner(x: T); // error, same T >inner : { (x: T): any; (x: T): any; } >x : T >T : T function inner(x: T) { } >inner : { (x: T): any; (x: T): any; } >x : T >T : T function inner2(x: T); >inner2 : { (x: T): any; (x: T): any; } >x : T >T : T function inner2(x: T); // no error, different T >inner2 : { (x: T): any; (x: T): any; } >T : T >x : T >T : T function inner2(x: any) { } >inner2 : { (x: T): any; (x: T): any; } >x : any } class C { >C : C >T : T foo1(x: T); >foo1 : { (x: T): any; (x: T): any; } >x : T >T : T foo1(x: T); // error, same T >foo1 : { (x: T): any; (x: T): any; } >x : T >T : T foo1(x: T) { } >foo1 : { (x: T): any; (x: T): any; } >x : T >T : T foo2(a: T, x: U); >foo2 : { (a: T, x: U): any; (a: T, x: U): any; } >U : U >a : T >T : T >x : U >U : U foo2(a: T, x: U); // no error, different declaration for each U >foo2 : { (a: T, x: U): any; (a: T, x: U): any; } >U : U >a : T >T : T >x : U >U : U foo2(a: T, x: U) { } >foo2 : { (a: T, x: U): any; (a: T, x: U): any; } >U : U >a : T >T : T >x : U >U : U foo3(x: T); >foo3 : { (x: T): any; (x: T): any; } >T : T >x : T >T : T foo3(x: T); // no error, different declaration for each T >foo3 : { (x: T): any; (x: T): any; } >T : T >x : T >T : T foo3(x: T) { } >foo3 : { (x: T): any; (x: T): any; } >T : T >x : T >T : T foo4(x: T); >foo4 : { (x: T): any; (x: T): any; } >T : T >Date : Date >x : T >T : T foo4(x: T); // no error, different declaration for each T >foo4 : { (x: T): any; (x: T): any; } >T : T >Date : Date >x : T >T : T foo4(x: T) { } >foo4 : { (x: T): any; (x: T): any; } >T : T >Date : Date >x : T >T : T } class C2 { >C2 : C2 >T : T >Date : Date foo1(x: T); >foo1 : { (x: T): any; (x: T): any; } >x : T >T : T foo1(x: T); // error, same T >foo1 : { (x: T): any; (x: T): any; } >x : T >T : T foo1(x: T) { } >foo1 : { (x: T): any; (x: T): any; } >x : T >T : T foo2(a: T, x: U); >foo2 : { (a: T, x: U): any; (a: T, x: U): any; } >U : U >a : T >T : T >x : U >U : U foo2(a: T, x: U); // no error, different declaration for each U >foo2 : { (a: T, x: U): any; (a: T, x: U): any; } >U : U >a : T >T : T >x : U >U : U foo2(a: T, x: U) { } >foo2 : { (a: T, x: U): any; (a: T, x: U): any; } >U : U >a : T >T : T >x : U >U : U foo3(x: T); >foo3 : { (x: T): any; (x: T): any; } >T : T >x : T >T : T foo3(x: T); // no error, different declaration for each T >foo3 : { (x: T): any; (x: T): any; } >T : T >x : T >T : T foo3(x: T) { } >foo3 : { (x: T): any; (x: T): any; } >T : T >x : T >T : T } interface I { >I : I >T : T foo1(x: T); >foo1 : { (x: T): any; (x: T): any; } >x : T >T : T foo1(x: T); // error, same T >foo1 : { (x: T): any; (x: T): any; } >x : T >T : T foo2(a: T, x: U); >foo2 : { (a: T, x: U): any; (a: T, x: U): any; } >U : U >a : T >T : T >x : U >U : U foo2(a: T, x: U); // no error, different declaration for each U >foo2 : { (a: T, x: U): any; (a: T, x: U): any; } >U : U >a : T >T : T >x : U >U : U foo3(x: T); >foo3 : { (x: T): any; (x: T): any; } >T : T >x : T >T : T foo3(x: T); // no error, different declaration for each T >foo3 : { (x: T): any; (x: T): any; } >T : T >x : T >T : T foo4(x: T); >foo4 : { (x: T): any; (x: T): any; } >T : T >Date : Date >x : T >T : T foo4(x: T); // no error, different declaration for each T >foo4 : { (x: T): any; (x: T): any; } >T : T >Date : Date >x : T >T : T } interface I2 { >I2 : I2 >T : T >Date : Date foo1(x: T); >foo1 : { (x: T): any; (x: T): any; } >x : T >T : T foo1(x: T); // error, same T >foo1 : { (x: T): any; (x: T): any; } >x : T >T : T foo2(a: T, x: U); >foo2 : { (a: T, x: U): any; (a: T, x: U): any; } >U : U >a : T >T : T >x : U >U : U foo2(a: T, x: U); // no error, different declaration for each U >foo2 : { (a: T, x: U): any; (a: T, x: U): any; } >U : U >a : T >T : T >x : U >U : U foo3(x: T); >foo3 : { (x: T): any; (x: T): any; } >T : T >x : T >T : T foo3(x: T); // no error, different declaration for each T >foo3 : { (x: T): any; (x: T): any; } >T : T >x : T >T : T }