Call a member of an object with arguments
I think this does the trick: function callMethodWithArgs< M extends keyof T, T extends { [m in M]: (…args: Array<any>) => any }, F extends T[M] >(obj: T, methodName: M, args: Parameters<F>) { return obj[methodName](…args) as ReturnType<F>; } Requires TS 3 though!