【问题标题】:TypeScript - what type is f.e. setIntervalTypeScript - 什么类型是 f.e.设置间隔
【发布时间】:2018-12-24 20:56:52
【问题描述】:

如果我想将类型分配给稍后将被分配一个 setInterval 的变量,如下所示:

this.autoSaveInterval = setInterval(function(){
      if(this.car.id){
        this.save();
      }
      else{
        this.create();
      }
    }.bind(this), 50000);

应该为 this.autosaveInterval 变量分配什么类型?

【问题讨论】:

  • 公共 autoSaveInterval :number;
  • 你不需要指定类型; autoSaveInterval 将从 setInterval 调用的返回值推断其类型。在浏览器平台中这是 number,但在 node.js 中是 Timer

标签: javascript angular typescript typescript2.0


【解决方案1】:

类型取决于你要使用的函数有2个重载,返回类型用红色边框标记:

要使用返回数字的,请使用:

window.setInterval(...)

【讨论】:

  • 你能分享你得到这个参考的网站或书吗?谢谢。
  • 您好,这不是一本书,如果您使用 Visual Studio 并搜索实现,您可以找到它。
【解决方案2】:

晚了,但最好的类型(特别是因为类型是不透明的,我们只关心我们可以稍后将它传递给clearInterval())可能是自动推导出的,即。类似:

ReturnType<typeof setInterval>

【讨论】:

  • 伙计,这绝对应该被选为正确答案。 “数字”不起作用,尤其是在角度
  • 我要参加聚会,号码也不适合我,谢谢!!
  • 最干净的解决问题的方法,适用于所有环境
  • 哇,不知道 ReturnType。好大啊!
【解决方案3】:

类型为数字;

private autoSaveInterval: number = setInterval(() => {
  console.log('123');
}, 5000);

【讨论】:

  • @gfels 因为 setInterval 返回表示设置的计时器的 ID 值。您可以将此值与 clearInterval() 方法一起使用来取消计时器。它不是函数,因为您没有将函数处理程序分配给它,您将函数的结果/返回值分配给它。
  • 如果您使用的是 TypeScript,并且由于某种方式推断出 NodeJS.Timer 类型而导致编译器错误:更改为 window.setInterval 以指定您没有使用节点并且应该使用 DOM 类型,这确实是数字。
  • 不是node.js中的数字
【解决方案4】:

我相信它的 NodeJS.Timeout 和 widow.setInterval 是数字:

const nodeInterval: NodeJS.Timeout = setInterval(() => {
  // do something
}, 1000);

const windowInterval: number = window.setInterval(() => {
  // do something
}, 1000);

【讨论】:

    【解决方案5】:

    使用 typeof 运算符查找任何变量的数据类型,如下所示:

    typeof 是放在单个操作数之前的一元运算符 可以是任何类型。它的值是一个字符串,它指定 操作数的类型。

    var variable1 = "Hello";
    var autoSaveInterval;
    
    this.autoSaveInterval = setInterval(function(){
          if(this.car.id){
            this.save();
          }
          else{
            this.create();
          }
        }.bind(this), 50000);
        
    console.log("1st: " + typeof(variable1))
    console.log("2nd: " + typeof(autoSaveInterval ))

    【讨论】:

    • 这对 Typescript 定义没有帮助
    猜你喜欢
    • 2021-02-19
    • 2012-10-24
    • 2016-06-28
    • 2021-07-06
    • 2021-08-01
    • 2018-10-13
    • 2021-10-24
    • 2017-06-07
    • 2017-10-20
    相关资源
    最近更新 更多