Have you tried this:
function doSth<A, B>(a: A, b: B): B { /* ... */ }
function callFn<Args extends any[], Out>(fn: (...args: Args) => Out, ...args: Args): Out { /* ... */ }
const foo = callFn(doSth, 'asdf', 'bsd' as const) // a: 'bsd'
const bar = callFn(doSth, 'asdf') // error