const check =(settings:{load:(...args:Args)=>Ret, save:(internal:Ret)=>Args})=> { return {} as [never, ...Args][Args["length"]]; } function load(a1:string, a2:string, a3:string, a4:Record) { return [1, 2, 3] } type LoadArgs = Parameters; function save(n:number[]) { return ["a", "b", "c", { x: 1, y: 2 }] as LoadArgs } const c1 = check({load, save});