=== tests/cases/conformance/expressions/contextualTyping/objectLiteralContextualTyping.ts === // In a contextually typed object literal, each property value expression is contextually typed by // the type of the property with a matching name in the contextual type, if any, or otherwise // for a numerically named property, the numeric index type of the contextual type, if any, or otherwise // the string index type of the contextual type, if any. interface Item { >Item : Item name: string; >name : string description?: string; >description : string } declare function foo(item: Item): string; >foo : { (item: Item): string; (item: any): number; } >item : Item >Item : Item declare function foo(item: any): number; >foo : { (item: Item): string; (item: any): number; } >item : any var x = foo({ name: "Sprocket" }); >x : string >foo({ name: "Sprocket" }) : string >foo : { (item: Item): string; (item: any): number; } >{ name: "Sprocket" } : { name: string; } >name : string >"Sprocket" : string var x: string; >x : string var y = foo({ name: "Sprocket", description: "Bumpy wheel" }); >y : string >foo({ name: "Sprocket", description: "Bumpy wheel" }) : string >foo : { (item: Item): string; (item: any): number; } >{ name: "Sprocket", description: "Bumpy wheel" } : { name: string; description: string; } >name : string >"Sprocket" : string >description : string >"Bumpy wheel" : string var y: string; >y : string var z = foo({ name: "Sprocket", description: false }); >z : number >foo({ name: "Sprocket", description: false }) : number >foo : { (item: Item): string; (item: any): number; } >{ name: "Sprocket", description: false } : { name: string; description: boolean; } >name : string >"Sprocket" : string >description : boolean >false : boolean var z: number; >z : number var w = foo({ a: 10 }); >w : number >foo({ a: 10 }) : number >foo : { (item: Item): string; (item: any): number; } >{ a: 10 } : { a: number; } >a : number >10 : number var w: number; >w : number declare function bar(param: { x?: T }): T; >bar : (param: { x?: T; }) => T >T : T >param : { x?: T; } >x : T >T : T >T : T var b = bar({}); >b : {} >bar({}) : {} >bar : (param: { x?: T; }) => T >{} : {} var b: {}; >b : {}