ts中时间函数的写法?

ts小白的提问,我想实现一个定时器,我写的代码如下:

var countDown: number = 3;
const timer: number = setTimeout(() => {
  if (countDown < 1) {
    clearTimeout(timer);
  } else {
    countDown--;
  }
}, 1000);
timer();

但此段代码在编辑器中会有报错提示
原因我猜是因为 setTimeout 并没有返回出一个具体的数值,而 timer 函数又被我定义的数字类型
我之所以这么写是因为度娘说 时间函数 类型是 数字类型
so,还望大家指点正确写法,万分感谢!

阅读 1.6k
3 个回答

你看看你的timer,它就是setTimeout返回的结果,是一个数字,不是一个方法,你声明timer = setTimout()的时候setTimeout已经执行了,数字无法用timer()这种方式去调用
再说setTimeout的执行结果返回的就是一个数字,和你把timer设置成number没关系

这段代码有两个问题:

  • timer() 这行代码是无法执行的,因为 timer 是一个定时器的句柄,它返回的是一个数字,而不是一个函数。
  • setTimeout延时器只会执行一次,你应该用setInterval

修改后:

let countDown: number = 3;

const timer = setInterval(() => {
  if (countDown < 1) {
    clearInterval(timer);
  } else {
    console.log(countDown);
    countDown--;
  }
}, 1000);
var countDown: number = 3;
const timer: number = setTimeout(() => {
  if (countDown < 1) {
    clearTimeout(timer); //永远不会执行
  } else { 
    countDown--;//只会执行一次
  }
}, 1000);
timer();//time是个Number,不是函数,不能这样调用

如果改成:

var countDown: number = 3;
const timer:number = setInterval(() => {
  if (countDown < 1) {
    clearTimeout(timer);
  } else {
    countDown--;
  }
}, 1000);

这才是每隔一秒执行一次

推荐问题
logo
Microsoft
子站问答
访问
宣传栏