=== tests/cases/compiler/chainedSpecializationToObjectTypeLiteral.ts === interface Sequence { >Sequence : Sequence >T : T each(iterator: (value: T) => void): void; >each : (iterator: (value: T) => void) => void >iterator : (value: T) => void >value : T >T : T map(iterator: (value: T) => U): Sequence; >map : (iterator: (value: T) => U) => Sequence >U : U >iterator : (value: T) => U >value : T >T : T >U : U >Sequence : Sequence >U : U filter(iterator: (value: T) => boolean): Sequence; >filter : (iterator: (value: T) => boolean) => Sequence >iterator : (value: T) => boolean >value : T >T : T >Sequence : Sequence >T : T groupBy(keySelector: (value: T) => K): Sequence<{ key: K; items: T[]; }>; >groupBy : (keySelector: (value: T) => K) => Sequence<{ key: K; items: T[]; }> >K : K >keySelector : (value: T) => K >value : T >T : T >K : K >Sequence : Sequence >key : K >K : K >items : T[] >T : T } var s: Sequence; >s : Sequence >Sequence : Sequence var s2 = s.groupBy(s => s.length); >s2 : Sequence<{ key: number; items: string[]; }> >s.groupBy(s => s.length) : Sequence<{ key: number; items: string[]; }> >s.groupBy : (keySelector: (value: string) => K) => Sequence<{ key: K; items: string[]; }> >s : Sequence >groupBy : (keySelector: (value: string) => K) => Sequence<{ key: K; items: string[]; }> >s => s.length : (s: string) => number >s : string >s.length : number >s : string >length : number var s3 = s2.each(x => { x.key /* Type is K, should be number */ }); >s3 : void >s2.each(x => { x.key /* Type is K, should be number */ }) : void >s2.each : (iterator: (value: { key: number; items: string[]; }) => void) => void >s2 : Sequence<{ key: number; items: string[]; }> >each : (iterator: (value: { key: number; items: string[]; }) => void) => void >x => { x.key /* Type is K, should be number */ } : (x: { key: number; items: string[]; }) => void >x : { key: number; items: string[]; } >x.key : number >x : { key: number; items: string[]; } >key : number