=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgsAndNumericIndexer.ts === // Type inference infers from indexers in target type, no errors expected function foo(x: T) { >foo : (x: T) => T >T : T >x : T >T : T return x; >x : T } var a: { [x: number]: Date }; >a : { [x: number]: Date; } >x : number >Date : Date var r = foo(a); >r : { [x: number]: Date; } >foo(a) : { [x: number]: Date; } >foo : (x: T) => T >a : { [x: number]: Date; } function other(arg: T) { >other : (arg: T) => void >T : T >arg : T >T : T var b: { [x: number]: T }; >b : { [x: number]: T; } >x : number >T : T var r2 = foo(b); // T >r2 : { [x: number]: T; } >foo(b) : { [x: number]: T; } >foo : (x: T) => T >b : { [x: number]: T; } } function other2(arg: T) { >other2 : (arg: T) => void >T : T >Date : Date >arg : T >T : T var b: { [x: number]: T }; >b : { [x: number]: T; } >x : number >T : T var r2 = foo(b); >r2 : { [x: number]: T; } >foo(b) : { [x: number]: T; } >foo : (x: T) => T >b : { [x: number]: T; } var d = r2[1]; >d : T >r2[1] : T >r2 : { [x: number]: T; } >1 : number } function other3(arg: T) { >other3 : (arg: T) => void >T : T >Date : Date >U : U >Date : Date >arg : T >T : T var b: { [x: number]: T }; >b : { [x: number]: T; } >x : number >T : T var r2 = foo(b); >r2 : { [x: number]: T; } >foo(b) : { [x: number]: T; } >foo : (x: T) => T >b : { [x: number]: T; } var d = r2[1]; >d : T >r2[1] : T >r2 : { [x: number]: T; } >1 : number // BUG 821629 //var u: U = r2[1]; // ok } //function other3(arg: T) { // var b: { [x: number]: T }; // var r2 = foo(b); // var d = r2[1]; // // BUG 821629 // //var u: U = r2[1]; // ok //}