You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TypeScript中向另一个函数传递带参数的函数并执行?

解决方法

你当前写法的核心问题是:getTheResult1(2,3,4)会立即执行,把返回的数字传给intermediary,而非传递一个待执行的函数。此时passedFunction是数字类型,调用passedFunction()必然报错。

正确的思路是把带参数的目标函数调用,包裹成一个无参回调函数传给中间件,让中间件在校验通过后再执行这个回调。

基础实现(适配返回数字的函数)

function getTheResult1(inputVal: number, multiplier: number, subtractor: number): number {
  return inputVal * multiplier - subtractor;
}

function getTheResult2(inputVal: number, dividor: number): number {
  return inputVal / dividor;
}

// 修改中间件,接收无参回调函数
function intermediary(callback: () => number, name: string): number {
  if (name === 'John') {
    return -1;
  }
  // 校验通过后执行回调
  return callback();
}

// 调用时用箭头函数包裹目标函数的带参调用
let myFirstNum = intermediary(() => getTheResult1(2, 3, 4), 'John');
let mySecondNum = intermediary(() => getTheResult2(2, 3), 'Doe');

console.log(myFirstNum); // 输出 -1
console.log(mySecondNum); // 输出 0.666...

泛型进阶版(支持任意返回类型)

如果需要适配返回字符串、对象等其他类型的函数,可以用泛型让中间件更通用:

// 泛型中间件,T代表回调的返回类型
function intermediary<T>(callback: () => T, name: string): T | number {
  if (name === 'John') {
    return -1; // 若需严格类型匹配,可替换为对应T类型的默认值
  }
  return callback();
}

// 示例:返回字符串的函数
function getGreeting(name: string): string {
  return `Hello, ${name}!`;
}

let greeting = intermediary(() => getGreeting('Alice'), 'Doe');
console.log(greeting); // 输出 "Hello, Alice!"

let blockedGreeting = intermediary(() => getGreeting('Bob'), 'John');
console.log(blockedGreeting); // 输出 -1

这种方式的优势是完全适配任意参数结构的目标函数——中间件无需关心目标函数的参数细节,只负责校验后执行回调即可。

内容的提问来源于stack exchange,提问作者JosephG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:05:05