/** will reject function execution if the arguments don't match type guard */ export function argumentGuard(fn, ...checks) { return (...args) => { if (args.length === checks.length && args.every((arg, index) => checks[index](arg))) { return fn(...args); } return undefined; }; }