1// @strict: true 2// the type printback for every `test` below should be "y" 3 4type ExtendedMapper<HandledInputT, OutputT, ArgsT extends any[]> = (name : string, mixed : HandledInputT, ...args : ArgsT) => OutputT; 5type a = ExtendedMapper<any, any, [any]>; 6type b = ExtendedMapper<any, any, any[]>; 7type test = a extends b ? "y" : "n" 8let check: test = "y"; 9 10 11type ExtendedMapper1<HandledInputT, OutputT, ArgsT extends any[]> = ( 12 (name : string, mixed : HandledInputT, ...args : ArgsT) => OutputT 13); 14 15type a1 = ExtendedMapper1<any, any, [any]>; 16type b1 = ExtendedMapper1<any, any, any[]>; 17type test1 = a1 extends b1 ? "y" : "n" 18let check1: test1 = "y"; 19 20type ExtendedMapper2<HandledInputT, OutputT, ArgsT extends any[]> = ( 21 {x:(name : string, mixed : HandledInputT, ...args : ArgsT) => OutputT}["x"] 22); 23 24type a2 = ExtendedMapper2<any, any, [any]>; 25type b2 = ExtendedMapper2<any, any, any[]>; 26type test2 = a2 extends b2 ? "y" : "n" 27let check2: test2 = "y"; 28 29type a3 = (name: string, mixed: any, args_0: any) => any 30type b3 = (name: string, mixed: any, ...args: any[]) => any 31 32type test3 = a3 extends b3 ? "y" : "n" 33let check3: test3 = "y"; 34