算术运算的左边和右边必须是“ any”、“ number”或枚举类型

我得到以下错误。我不能找出我到底哪里出错了。有人能帮我解决这个问题吗

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
}
90747 次浏览

我已经发现了问题所在。

您所编写的代码只适用于 Javascript

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

为了使它在 打印稿中工作,更新代码如下所示:

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

最简单的答案是

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

另一个好办法:

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

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

只需使用 getTime()方法就可以将 Date 转换为数字(GetTime ()) ,这样就可以在不出现该错误的情况下进行操作

看看这个例子

不用说,你的代码在 Javascript中工作正常,如果你想在 打印稿中得到相同的结果,你有 3选项

借助 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))

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

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

我希望它能帮助那些和我有同样问题的人。

类型脚本似乎存在隐式转换的问题,所以我们可以将它们显式化:

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

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

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

仅仅为了安抚 Typecript 而过多地修改代码并不总是安全的,因为可能由于错误的假设而引入错误。这种情况尤其是当一个人决定转换一些旧的。Js 文件到。文件。一般来说,我认为显式地进行隐式转换是最安全的方法。

在我的例子中,我在输入 Math.abs()之后添加 .valueOf()

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

根据 医生台的报道:

valueOf()方法返回指定对象的基元值。