打字稿去抖动函数不调用作为参数传递的函数

Flu*_*ice 7 javascript typescript debounce

我正在尝试使用typescript编写去抖动函数。

我在这里找到了一个例子。代码如下:

export function debounce<Params extends any[]>(
  func: (...args: Params) => any,
  timeout: number,
): (...args: Params) => void {
  let timer: NodeJS.Timeout
  return (...args: Params) => {
    clearTimeout(timer)
    timer = setTimeout(() => {
      func(...args)
    }, timeout)
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是:

  • 在指定的超时后未调用作为参数传递的函数
  • 我不能使用 lodash 或任何其他外部库,因为我试图避免向这个项目添加新的依赖项。

谢谢。

svl*_*ccc 6

你如何使用你的debounce功能?我准备小提琴,你可以在这里查看工作解决方案

function debounce<Params extends any[]>(
  func: (...args: Params) => any,
  timeout: number,
): (...args: Params) => void {
  let timer: NodeJS.Timeout
  return (...args: Params) => {
    clearTimeout(timer)
    timer = setTimeout(() => {
      func(...args)
    }, timeout)
  }
}

function test(message) {
  alert(message);
}

const debouncedTest = debounce(test, 2000);

debouncedTest('message');
Run Code Online (Sandbox Code Playgroud)

嗯,这不是打字稿的麻烦