=== tests/cases/compiler/genericSpecializationToTypeLiteral1.ts === interface IEnumerable { >IEnumerable : IEnumerable >T : T zip(second: IEnumerable, resultSelector: (first: T, second: T, index: number) => TResult): IEnumerable; >zip : { (second: IEnumerable, resultSelector: (first: T, second: T, index: number) => TResult): IEnumerable; (second: T[], resultSelector: (first: T, second: T, index: number) => TResult): IEnumerable; (...params: any[]): IEnumerable; } >TResult : TResult >second : IEnumerable >IEnumerable : IEnumerable >T : T >resultSelector : (first: T, second: T, index: number) => TResult >first : T >T : T >second : T >T : T >index : number >TResult : TResult >IEnumerable : IEnumerable >TResult : TResult zip(second: T[], resultSelector: (first: T, second: T, index: number) => TResult): IEnumerable; >zip : { (second: IEnumerable, resultSelector: (first: T, second: T, index: number) => TResult): IEnumerable; (second: T[], resultSelector: (first: T, second: T, index: number) => TResult): IEnumerable; (...params: any[]): IEnumerable; } >TResult : TResult >second : T[] >T : T >resultSelector : (first: T, second: T, index: number) => TResult >first : T >T : T >second : T >T : T >index : number >TResult : TResult >IEnumerable : IEnumerable >TResult : TResult zip(...params: any[]): IEnumerable; // last one is selector >zip : { (second: IEnumerable, resultSelector: (first: T, second: T, index: number) => TResult): IEnumerable; (second: T[], resultSelector: (first: T, second: T, index: number) => TResult): IEnumerable; (...params: any[]): IEnumerable; } >TResult : TResult >params : any[] >IEnumerable : IEnumerable >TResult : TResult merge(...params: IEnumerable[]): IEnumerable; >merge : { (...params: IEnumerable[]): IEnumerable; (...params: T[][]): IEnumerable; } >TResult : TResult >params : IEnumerable[] >IEnumerable : IEnumerable >T : T >IEnumerable : IEnumerable >T : T merge(...params: T[][]): IEnumerable; >merge : { (...params: IEnumerable[]): IEnumerable; (...params: T[][]): IEnumerable; } >TResult : TResult >params : T[][] >T : T >IEnumerable : IEnumerable >T : T concat(...sequences: IEnumerable[]): IEnumerable; >concat : { (...sequences: IEnumerable[]): IEnumerable; (...sequences: T[]): IEnumerable; } >sequences : IEnumerable[] >IEnumerable : IEnumerable >T : T >IEnumerable : IEnumerable >T : T concat(...sequences: T[]): IEnumerable; >concat : { (...sequences: IEnumerable[]): IEnumerable; (...sequences: T[]): IEnumerable; } >sequences : T[] >T : T >IEnumerable : IEnumerable >T : T insert(index: number, second: IEnumerable): IEnumerable; >insert : (index: number, second: IEnumerable) => IEnumerable >index : number >second : IEnumerable >IEnumerable : IEnumerable >T : T >IEnumerable : IEnumerable >T : T sequenceEqual(second: IEnumerable): boolean; >sequenceEqual : { (second: IEnumerable): boolean; (second: IEnumerable, compareSelector: (element: T) => TCompare): boolean; (second: T[]): boolean; (second: T[], compareSelector: (element: T) => TCompare): boolean; } >second : IEnumerable >IEnumerable : IEnumerable >T : T sequenceEqual(second: IEnumerable, compareSelector: (element: T) => TCompare): boolean; >sequenceEqual : { (second: IEnumerable): boolean; (second: IEnumerable, compareSelector: (element: T) => TCompare): boolean; (second: T[]): boolean; (second: T[], compareSelector: (element: T) => TCompare): boolean; } >TCompare : TCompare >second : IEnumerable >IEnumerable : IEnumerable >T : T >compareSelector : (element: T) => TCompare >element : T >T : T >TCompare : TCompare sequenceEqual(second: T[]): boolean; >sequenceEqual : { (second: IEnumerable): boolean; (second: IEnumerable, compareSelector: (element: T) => TCompare): boolean; (second: T[]): boolean; (second: T[], compareSelector: (element: T) => TCompare): boolean; } >second : T[] >T : T sequenceEqual(second: T[], compareSelector: (element: T) => TCompare): boolean; >sequenceEqual : { (second: IEnumerable): boolean; (second: IEnumerable, compareSelector: (element: T) => TCompare): boolean; (second: T[]): boolean; (second: T[], compareSelector: (element: T) => TCompare): boolean; } >TCompare : TCompare >second : T[] >T : T >compareSelector : (element: T) => TCompare >element : T >T : T >TCompare : TCompare toDictionary(keySelector: (element: T) => TKey): IDictionary; >toDictionary : { (keySelector: (element: T) => TKey): IDictionary; (keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue): IDictionary; (keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue, compareSelector: (key: TKey) => TCompare): IDictionary; } >TKey : TKey >keySelector : (element: T) => TKey >element : T >T : T >TKey : TKey >IDictionary : IDictionary >TKey : TKey toDictionary(keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue): IDictionary; >toDictionary : { (keySelector: (element: T) => TKey): IDictionary; (keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue): IDictionary; (keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue, compareSelector: (key: TKey) => TCompare): IDictionary; } >TKey : TKey >TValue : TValue >keySelector : (element: T) => TKey >element : T >T : T >TKey : TKey >elementSelector : (element: T) => TValue >element : T >T : T >TValue : TValue >IDictionary : IDictionary >TKey : TKey >TValue : TValue toDictionary(keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue, compareSelector: (key: TKey) => TCompare): IDictionary; >toDictionary : { (keySelector: (element: T) => TKey): IDictionary; (keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue): IDictionary; (keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue, compareSelector: (key: TKey) => TCompare): IDictionary; } >TKey : TKey >TValue : TValue >TCompare : TCompare >keySelector : (element: T) => TKey >element : T >T : T >TKey : TKey >elementSelector : (element: T) => TValue >element : T >T : T >TValue : TValue >compareSelector : (key: TKey) => TCompare >key : TKey >TKey : TKey >TCompare : TCompare >IDictionary : IDictionary >TKey : TKey >TValue : TValue } interface IDictionary { >IDictionary : IDictionary >TKey : TKey >TValue : TValue toEnumerable(): IEnumerable<{ key: TKey; value: TValue }>; >toEnumerable : () => IEnumerable<{ key: TKey; value: TValue; }> >IEnumerable : IEnumerable >key : TKey >TKey : TKey >value : TValue >TValue : TValue }