我收到以下错误。我无法找出我到底出错的地方。有人可以帮我解决问题
代码
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
}
答案 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()),这样您就可以进行操作而不会出现该错误
答案 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()
方法返回指定对象的原始值。