127 lines
1.9 KiB
Plaintext
127 lines
1.9 KiB
Plaintext
=== tests/cases/conformance/types/objectTypeLiteral/callSignatures/typeParameterUsedAsTypeParameterConstraint.ts ===
|
|
// Type parameters are in scope in their own and other type parameter lists
|
|
|
|
function foo<T, U extends T>(x: T, y: U): T {
|
|
>foo : <T, U extends T>(x: T, y: U) => T
|
|
>T : T
|
|
>U : U
|
|
>T : T
|
|
>x : T
|
|
>T : T
|
|
>y : U
|
|
>U : U
|
|
>T : T
|
|
|
|
x = y;
|
|
>x = y : U
|
|
>x : T
|
|
>y : U
|
|
|
|
return y;
|
|
>y : U
|
|
}
|
|
|
|
function foo2<U extends T, T>(x: T, y: U): T {
|
|
>foo2 : <U extends T, T>(x: T, y: U) => T
|
|
>U : U
|
|
>T : T
|
|
>T : T
|
|
>x : T
|
|
>T : T
|
|
>y : U
|
|
>U : U
|
|
>T : T
|
|
|
|
x = y;
|
|
>x = y : U
|
|
>x : T
|
|
>y : U
|
|
|
|
return y;
|
|
>y : U
|
|
}
|
|
|
|
var f = function <T, U extends T>(x: T, y: U): T {
|
|
>f : <T, U extends T>(x: T, y: U) => T
|
|
>function <T, U extends T>(x: T, y: U): T { x = y; return y;} : <T, U extends T>(x: T, y: U) => T
|
|
>T : T
|
|
>U : U
|
|
>T : T
|
|
>x : T
|
|
>T : T
|
|
>y : U
|
|
>U : U
|
|
>T : T
|
|
|
|
x = y;
|
|
>x = y : U
|
|
>x : T
|
|
>y : U
|
|
|
|
return y;
|
|
>y : U
|
|
}
|
|
|
|
var f2 = function <U extends T, T>(x: T, y: U): T {
|
|
>f2 : <U extends T, T>(x: T, y: U) => T
|
|
>function <U extends T, T>(x: T, y: U): T { x = y; return y;} : <U extends T, T>(x: T, y: U) => T
|
|
>U : U
|
|
>T : T
|
|
>T : T
|
|
>x : T
|
|
>T : T
|
|
>y : U
|
|
>U : U
|
|
>T : T
|
|
|
|
x = y;
|
|
>x = y : U
|
|
>x : T
|
|
>y : U
|
|
|
|
return y;
|
|
>y : U
|
|
}
|
|
|
|
var f3 = <T, U extends T>(x: T, y: U): T => {
|
|
>f3 : <T, U extends T>(x: T, y: U) => T
|
|
><T, U extends T>(x: T, y: U): T => { x = y; return y;} : <T, U extends T>(x: T, y: U) => T
|
|
>T : T
|
|
>U : U
|
|
>T : T
|
|
>x : T
|
|
>T : T
|
|
>y : U
|
|
>U : U
|
|
>T : T
|
|
|
|
x = y;
|
|
>x = y : U
|
|
>x : T
|
|
>y : U
|
|
|
|
return y;
|
|
>y : U
|
|
}
|
|
|
|
var f4 = <U extends T, T>(x: T, y: U): T => {
|
|
>f4 : <U extends T, T>(x: T, y: U) => T
|
|
><U extends T, T>(x: T, y: U): T => { x = y; return y;} : <U extends T, T>(x: T, y: U) => T
|
|
>U : U
|
|
>T : T
|
|
>T : T
|
|
>x : T
|
|
>T : T
|
|
>y : U
|
|
>U : U
|
|
>T : T
|
|
|
|
x = y;
|
|
>x = y : U
|
|
>x : T
|
|
>y : U
|
|
|
|
return y;
|
|
>y : U
|
|
}
|