算术运算的左手和右手必须是"any","number"或枚举类型

ark*_*ark 20 typescript angular

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

在此输入图像描述

代码

 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
}
Run Code Online (Sandbox Code Playgroud)

ark*_*ark 47

我发现了这个问题.

此代码仅适用于Javascript

Math.abs(new Date() - new Date(lastConnect)) .
Run Code Online (Sandbox Code Playgroud)

为了使它在Typescript中工作.更新代码,如下所示

Math.abs(Date().getTime() - new Date(lastConnect).getTime());
Run Code Online (Sandbox Code Playgroud)

  • 为什么会发生这个问题?打字稿没有日期类型吗?:/ (2认同)

Abo*_*zlR 14

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

(1) -在帮助下 valueOf

let diff = Math.abs(new Date().valueOf() - new Date(lastConnect).valueOf());
Run Code Online (Sandbox Code Playgroud)

(2) -在帮助下 getTime

let diff = Math.abs(new Date().getTime() - new Date(lastConnect).getTime());
// or
let diff = new Date().getTime() - new Date(lastConnect).getTime();
Run Code Online (Sandbox Code Playgroud)

(3) -在帮助下 any

let diff = Math.abs(<any>new Date() - <any>new Date(lastConnect))
Run Code Online (Sandbox Code Playgroud)


小智 9

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

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

检查这个例子


Vic*_*tor 8

另一个好方法:

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


Sud*_*rma 5

最简单的答案是

Math.abs(<any>new Date() - <any>new Date(lastConnect));
Run Code Online (Sandbox Code Playgroud)