Javascript 在类定义中重置setTimeout()

Javascript 在类定义中重置setTimeout(),javascript,typescript,class,settimeout,Javascript,Typescript,Class,Settimeout,在typescript中,我试图根据单击功能重置计时器。我已经研究了clearTimeout的解决方案,但它们似乎不适合在类中定义setTimeout()的情况 import { ModalAction } from "./modalScript.js"; export class Timer { private interval: number; constructor(interval: number) { this.interval = interval

在typescript中,我试图根据单击功能重置计时器。我已经研究了clearTimeout的解决方案,但它们似乎不适合在类中定义setTimeout()的情况

import { ModalAction } from "./modalScript.js";
export class Timer {
  private interval: number;
  constructor(interval: number) {
    this.interval = interval;
  }

  startTimer() {
    console.log("startedTimer");
    setTimeout(function () {
      let mod = new ModalAction();
      mod.renderModal();
    }, this.interval);
  }
  resetTimer() {
    clearTimeout();
  }
}
在我的外部类中,我创建了一个新的计时器类,它以一个间隔传递。我希望能够从外部类调用myTimerObject.clearTimeout()。clearTimeout需要一个数字。我尝试将startTimeout()设置为变量,但在clearTimout()中调用它时,它不会读取为数字


实施了这个建议,它起作用了,有一些变化和一个新问题。 我必须在构造函数中声明变量,否则typescript抱怨没有初始化。现在,当我从外部类创建新对象时,我必须传入一个数字参数。我随机地通过了数字1。看起来有点不干净,但它起作用了。有什么改进吗

import { ModalAction } from "./modalScript.js";
export class Timer {
  private interval: number;
  **private handler: number;**
  constructor(interval: number, **handler: number**) {
    this.interval = interval;
    **this.handler = handler;**
  }

  startTimer() {
    console.log("starting timer");
    this.handler = setTimeout(function () {
      let mod = new ModalAction();
      mod.renderModal();
    }, this.interval);
  }
  resetTimer() {
    console.log("timer reset");
    clearTimeout(this.handler);
    this.startTimer();
  }
}

使用myObject=新计时器(10000,1)构建

您可以通过将setTimeout结果分配给变量并在clearTimeout中使用它来修复代码

import { ModalAction } from "./modalScript.js";
export class Timer {
  private interval: number;
  private handler?: ReturnType<typeof setTimeout>;
  constructor(interval: number) {
    this.interval = interval;
  }

  startTimer() {
    console.log("startedTimer");
    this.handler = setTimeout(function () {
      let mod = new ModalAction();
      mod.renderModal();
    }, this.interval);
  }

  resetTimer() {
    clearTimeout(this.handler);
  }
}
从“/modalScript.js”导入{ModalAction};
导出类计时器{
专用间隔:数字;
私有处理程序?:返回类型;
构造函数(间隔:编号){
这个。间隔=间隔;
}
startTimer(){
console.log(“startedTimer”);
this.handler=setTimeout(函数(){
设mod=new ModalAction();
mod.renderModal();
},这个时间间隔);
}
重置计时器(){
clearTimeout(this.handler);
}
}

或者,您可以使用
number
作为setTimeout的返回类型。

您能否澄清您试图实现的目标?是否要在达到间隔并执行回调之前有效地取消超时?这是否回答了您的问题?我编辑了我的问题以反映你的建议。如有任何关于改进或清理的反馈,我们将不胜感激。否则,它会根据需要运行。请不要回答问题本身中的问题,如果您有更好的答案,请将其添加为答案。typescript抱怨的原因是您忘记了将数字设置为空,如本答案中的示例,
运算符位于
:type
之前。抱歉,注释部分不允许我粘贴代码。编辑我的问题是说明后续问题的唯一方法。我不认为这是个答案。一切正常,我很感激这些信息,它非常有帮助。