51 lines
1.9 KiB
Text
51 lines
1.9 KiB
Text
|
=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectLiteralArgs.ts ===
|
||
|
function foo<T>(x: { bar: T; baz: T }) {
|
||
|
>foo : <T>(x: { bar: T; baz: T; }) => { bar: T; baz: T; }
|
||
|
>T : T
|
||
|
>x : { bar: T; baz: T; }
|
||
|
>bar : T
|
||
|
>T : T
|
||
|
>baz : T
|
||
|
>T : T
|
||
|
|
||
|
return x;
|
||
|
>x : { bar: T; baz: T; }
|
||
|
}
|
||
|
|
||
|
var r = foo({ bar: 1, baz: '' }); // T = {}
|
||
|
>r : { bar: {}; baz: {}; }
|
||
|
>foo({ bar: 1, baz: '' }) : { bar: {}; baz: {}; }
|
||
|
>foo : <T>(x: { bar: T; baz: T; }) => { bar: T; baz: T; }
|
||
|
>{ bar: 1, baz: '' } : { bar: number; baz: string; }
|
||
|
>bar : number
|
||
|
>baz : string
|
||
|
|
||
|
var r2 = foo({ bar: 1, baz: 1 }); // T = number
|
||
|
>r2 : { bar: number; baz: number; }
|
||
|
>foo({ bar: 1, baz: 1 }) : { bar: number; baz: number; }
|
||
|
>foo : <T>(x: { bar: T; baz: T; }) => { bar: T; baz: T; }
|
||
|
>{ bar: 1, baz: 1 } : { bar: number; baz: number; }
|
||
|
>bar : number
|
||
|
>baz : number
|
||
|
|
||
|
// BUG 835724
|
||
|
var r3 = foo({ bar: foo, baz: foo }); // T = any
|
||
|
>r3 : { bar: <T>(x: { bar: T; baz: T; }) => { bar: T; baz: T; }; baz: <T>(x: { bar: T; baz: T; }) => { bar: T; baz: T; }; }
|
||
|
>foo({ bar: foo, baz: foo }) : { bar: <T>(x: { bar: T; baz: T; }) => { bar: T; baz: T; }; baz: <T>(x: { bar: T; baz: T; }) => { bar: T; baz: T; }; }
|
||
|
>foo : <T>(x: { bar: T; baz: T; }) => { bar: T; baz: T; }
|
||
|
>{ bar: foo, baz: foo } : { bar: <T>(x: { bar: T; baz: T; }) => { bar: T; baz: T; }; baz: <T>(x: { bar: T; baz: T; }) => { bar: T; baz: T; }; }
|
||
|
>bar : <T>(x: { bar: T; baz: T; }) => { bar: T; baz: T; }
|
||
|
>foo : foo
|
||
|
>baz : <T>(x: { bar: T; baz: T; }) => { bar: T; baz: T; }
|
||
|
>foo : foo
|
||
|
|
||
|
var r4 = foo<Object>({ bar: 1, baz: '' }); // T = Object
|
||
|
>r4 : { bar: Object; baz: Object; }
|
||
|
>foo<Object>({ bar: 1, baz: '' }) : { bar: Object; baz: Object; }
|
||
|
>foo : <T>(x: { bar: T; baz: T; }) => { bar: T; baz: T; }
|
||
|
>Object : Object
|
||
|
>{ bar: 1, baz: '' } : { bar: number; baz: string; }
|
||
|
>bar : number
|
||
|
>baz : string
|
||
|
|