算术运算的左手和右手必须是'任何','数字'或枚举类型

时间:2018-01-16 04:18:14

标签: angular typescript

我收到以下错误。我无法找出我到底出错的地方。有人可以帮我解决问题

enter image description here

代码

 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
}

8 个答案:

答案 0 :(得分:33)

我发现了这个问题。

此代码仅适用于 Javascript

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

为了使其在 Typescript 中运行。更新代码如下所示

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

答案 1 :(得分:4)

最简单的答案是

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

答案 2 :(得分:3)

不用说,您的代码可以在 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))

答案 3 :(得分:0)

另一个好方法:

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

答案 4 :(得分:0)

不需要Math.abs()来回答这个问题...

只需使用getTime()方法即可将Date转换为数字(Date.prototype.getTime()),这样您就可以进行操作而不会出现该错误

Check on this example

答案 5 :(得分:0)

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

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

我希望它可以帮助遇到与我相同问题的人。

答案 6 :(得分:0)

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

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

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

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

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

答案 7 :(得分:0)

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

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

根据德doc

<块引用>

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