【问题标题】:The left -hand and right hand side of an arithmetic operation must be of type 'any', 'number' or an enum type算术运算的左侧和右侧必须是“任意”、“数字”或枚举类型
【发布时间】:2018-06-24 17:39:11
【问题描述】:

我收到以下错误。我无法找出我到底哪里出错了。有人可以帮我解决一下吗

代码

 function() {
    this.devices.forEach(device => {
      let lastConnect = device.lastConnection.split('+');
      lastConnect = lastConnect[0] + 'Z';
      let diff = Math.abs(new Date() - new Date(lastConnect));//getting error here
}

【问题讨论】:

    标签: angular typescript


    【解决方案1】:

    这个问题不用Math.abs()回答...

    只需使用getTime() 方法将日期转换为数字(Date.prototype.getTime()),这样您就可以在没有错误的情况下进行操作

    Check on this example

    【讨论】:

      【解决方案2】:

      就我而言,我在输入Math.abs() 之后添加.valueOf()

      Math.round(valA.valueOf() / 20)
      

      据德doc:

      valueOf() 方法返回指定对象的原始值。

      【讨论】:

        【解决方案3】:

        Typescript 似乎有隐式转换的问题,所以我们可以让它们显式:

        Math.abs(+new Date() - +new Date(lastConnect));
        

        请注意,我们不需要任何括号,因为new 运算符比(一元)+ 运算符绑定得更紧密。毕竟,(+new) 没有任何意义。 - 之后的+ 也是必需的。

        我只会将any 用作最后的手段,因为它基本上会禁用类型检查。

        为了安抚 Typescript 而过多地修改一段代码并不总是安全的,因为错误的假设可能会导致错误。当人们决定将一些旧的 .js 文件转换为 .ts 文件时,尤其会发生这种情况。一般来说,我认为显式进行隐式转换是最安全的方法。

        【讨论】:

        • 干净利落的把戏,尽管我仍然会在此行后面发表评论,以向我的开发人员解释使用相同代码的同事 ;)
        【解决方案4】:

        我发现了问题。

        您编写的代码仅适用于 Javascript

        Math.abs(new Date() - new Date(lastConnect)) .
        

        为了让它在Typescript中工作,更新如下代码:

        Math.abs(new Date().getTime() - new Date(lastConnect).getTime());
        

        【讨论】:

        • 为什么会出现这个问题? Typescript 没有日期类型吗? ://
        • @Herbertusz 所有有效的 javascript 都是有效的 Typescript。 Typescript 只是让开发人员在类型检查方面更加周到。在这里,Typescript 让您了解在乍一看听起来不合逻辑的日期上使用算术,但我们无论如何都可以这样做,因为所有日期都可以转换为某种形式的可表示数字
        • Date().getTime() 应该等价于Date.now(),对吧?
        【解决方案5】:

        我遇到了与 *ngIf="event && +event.enableSomething" 相同的问题,因为有时我会收到 "0" 数据,因此需要进行解析,但为 enableSomething: boolean 创建了事件接口,所以在这种情况下,我正在恢复该错误。

        要解决此问题,请确保后端返回布尔值并将enableSomething: boolean 留在接口中或将接口修改为enableSomething: any

        我希望它能帮助遇到和我一样问题的人。

        【讨论】:

          【解决方案6】:

          不用说,您的代码在 Javascript 中可以正常工作,如果您想在 Typescript 中获得相同的结果,您有 3 选项

          (1) - 借助valueOf

          let diff = Math.abs(new Date().valueOf() - new Date(lastConnect).valueOf());
          

          (2) - 借助getTime

          let diff = Math.abs(new Date().getTime() - new Date(lastConnect).getTime());
          // or
          let diff = new Date().getTime() - new Date(lastConnect).getTime();
          

          (3) - 借助any

          let diff = Math.abs(<any>new Date() - <any>new Date(lastConnect))
          

          【讨论】:

          • 技术上 valueOf 和 getTime 对于日期来说是一样的,所以我宁愿说最好使用 getTime 因为 valueOf 是 js 转换的东西,它完全用于人们做的情况日期1 + 日期2
          • 这个简单的事实用三个选项解释得很好,这对我来说是最好的答案。不过我使用了 getTime()。
          【解决方案7】:

          另一个好方法:

          Math.abs((new Date() as any) - (new Date(lastConnect) as any));

          【讨论】:

            【解决方案8】:

            最简单的答案是

            Math.abs(<any>new Date() - <any>new Date(lastConnect));
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-08-02
              • 1970-01-01
              • 2020-12-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多