TypeScript中定时器的运用

首先一点,在ts里声明变量的时候要么指定其类型,要么指定它的值让ts自动判断,但是定时器的类型是什么呢?这里以VSCODE代码编辑器为例,写这样的代码:

let timeOne = 0;
timeOne = setTimeout(()=>{ console.log('此处声明了一个定时器')},1000)

然后在变量timeOne下面就会出红色波浪线提示错误:

不能将Timeout类型分配给number,那是不是代表这个定时器的类型是Timeout呢?

答案是:不是。如下:

这边提示是没有这个类,然后打开某度,搜索发现,可以使用numer这个类去定义计时器(此时定时器前的window不可省略):

这里插一点没用的废话知识,对于if/else的判断都比较熟悉,可能下意识的觉得以下代码是正确的:

let IntervalOne = 0;
let countNumber = 0;
if(countNumber > 10){
  IntervalOne = window.setInterval(()=>{ countNumber++ ,console.log(countNumber)},1000)
}else{
  window.clearInterval(IntervalOne);
  IntervalOne = 0;
}

实际上,博主在此之前也是这么理解的,看countNumber的值做判断,如果小了就增加,大了就停止,但是实际上得到的结果是一直都会执行这个定时器,也就是清除失败。

对于这个问题,博主是这么理解的,首先setInterval是一个异步操作,对于之后产生的结果没有一个确定性,TS里面和JS一样是从上往下解析,if拿到的数据永远只是初始数值(除非你在下面对其重新赋值),在执行if判断后,setInterval会执行,因为countNumber++是setInterval的回调,而且是异步的,所以整个if的代码块到这也就停了,再在else里面做清除实际上不会有任何作用,所以清除的方法判断要写在setInterval的回调中,也就是console.log的后面,这一点和JS里一样。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值