=== tests/cases/compiler/genericInference2.ts === declare module ko { >ko : typeof ko export interface Observable { >Observable : Observable >T : T (): T; >T : T (value: T): any; >value : T >T : T N: number; >N : number g: boolean; >g : boolean r: T; >r : T >T : T } export function observable(value: T): Observable; >observable : (value: T) => Observable >T : T >value : T >T : T >Observable : Observable >T : T } var o = { >o : { name: ko.Observable; age: ko.Observable; } >{ name: ko.observable("Bob"), age: ko.observable(37) } : { name: ko.Observable; age: ko.Observable; } name: ko.observable("Bob"), >name : ko.Observable >ko.observable("Bob") : ko.Observable >ko.observable : (value: T) => ko.Observable >ko : typeof ko >observable : (value: T) => ko.Observable age: ko.observable(37) >age : ko.Observable >ko.observable(37) : ko.Observable >ko.observable : (value: T) => ko.Observable >ko : typeof ko >observable : (value: T) => ko.Observable }; var x_v = o.name().length; // should be 'number' >x_v : number >o.name().length : number >o.name() : string >o.name : ko.Observable >o : { name: ko.Observable; age: ko.Observable; } >name : ko.Observable >length : number var age_v = o.age(); // should be 'number' >age_v : number >o.age() : number >o.age : ko.Observable >o : { name: ko.Observable; age: ko.Observable; } >age : ko.Observable var name_v = o.name("Robert"); // should be 'any' >name_v : any >o.name("Robert") : any >o.name : ko.Observable >o : { name: ko.Observable; age: ko.Observable; } >name : ko.Observable var zz_v = o.name.N; // should be 'number' >zz_v : number >o.name.N : number >o.name : ko.Observable >o : { name: ko.Observable; age: ko.Observable; } >name : ko.Observable >N : number var yy_v = o.name.g; // should be 'boolean' >yy_v : boolean >o.name.g : boolean >o.name : ko.Observable >o : { name: ko.Observable; age: ko.Observable; } >name : ko.Observable >g : boolean var rr_v = o.name.r; // should be 'string' >rr_v : string >o.name.r : string >o.name : ko.Observable >o : { name: ko.Observable; age: ko.Observable; } >name : ko.Observable >r : string