typescript 算术运算的左侧必须是“any”、“number”或枚举类型

kx1ctssn  于 2023-01-03  发布在  TypeScript
关注(0)|答案(8)|浏览(146)

第7行,dimensions.heightdimensions.width下的红色波浪线
算术运算的左侧必须是“any”、“number”或枚举类型。
我试图消除红色的波浪,但是我很难理解为什么打字脚本编译器会给我一个错误。据我所知,宽度和高度都是Number类型。

bvn4nwqk

bvn4nwqk1#

这是另一个发生这种错误的例子,可能对人们有所帮助。
如果您使用 typescript 并试图计算日期之间的差异(在我的情况下,我试图使用数据库中的ISO字符串):

new Date("2020-03-15T00:47:38.813Z") - new Date("2020-03-15T00:47:24.676Z")

打字机游戏场
它将显示错误。

但是,如果将其放在浏览器控制台或其他节点环境中,则可以使用完全相同的代码

new Date("2020-03-15T00:47:38.813Z") - new Date("2020-03-15T00:47:24.676Z")
14137

我可能错了,但我相信这是有效的,因为-操作符在它的每个操作数上都隐式地使用了valueOf。因为valueOf在Date上返回了number,所以操作有效。
然而,typescript不喜欢它,也许有一个编译器选项强制了这个约束,而我没有意识到。

new Date().valueOf()
1584233296463

您可以通过显式地使操作数为number(bigint)类型来修复,以便-能够工作。
固定示例

new Date("2020-03-15T00:47:38.813Z").valueOf() - new Date("2020-03-15T00:47:24.676Z").valueOf()

打字机游戏场

igsr9ssn

igsr9ssn2#

Number应为小写:number.

kmb7vmvb

kmb7vmvb3#

我找到的最干净的方法:

const diff = +new Date("2020-03-15") - +new Date("2020-03-15")

https://github.com/microsoft/TypeScript/issues/5710

hfyxw5xn

hfyxw5xn4#

可以将表达式转换为数字。

function findArea(dimensions: Dimensions): Number {    
    return Number(dimensions.height) * Number(dimensions.width);
}
hm2xizp9

hm2xizp95#

我在减去两个日期时遇到了这个问题,这个错误一直困扰着我,但是程序仍然按照预期输出。下面是按日期(从最新到最旧)排序对象数组的代码。

    • 问题**

第一个月

    • 解决方案**

var Sorted = Data.sort(function(a,b){ return new Date(b.Posted).getTime() - new Date(a.Posted).getTime() })

  • 日期:附加每个值**. getTime()**以将日期转换为数字。
  • Numbers:用**parseInt()**将每个值换行

据我所知,这个错误不会停止编译器/程序的执行;但是,为开发环境提供显式/受控变量类型是更好的做法。
以备将来参考; Javscript & Typescript can be unpredictable,因此使用显式类型和强制转换变量将删除这些警告/错误。

flseospp

flseospp6#

源代码/应用程序/演示.组件. ts中的错误(...):错误TS2362:算术运算的左侧必须是"any"、"number"或枚举类型。

    • 包. json-**
"dependencies": {
    "@angular/core": "^6.1.10"
}

"devDependencies": {
    "typescript": "^2.9.2"
}
    • 代码-**
dateISOString(d: any): string {
    var nDate = new Date(d);
    var tzoffset = nDate.getTimezoneOffset() * 60000;
    var localISOTime = (new Date(nDate - tzoffset)).toISOString(); // This line gives error
    return localISOTime;
}
    • 解决方案-**添加valueOf()和日期
var localISOTime = (new Date(nDate.valueOf() - tzoffset.valueOf())).toISOString();
wlzqhblo

wlzqhblo7#

我发现这个问题是通过使用.ts文件扩展名而不是.tsx文件扩展名调用的。我最近遇到了这个问题。它解决了我的问题

mzillmmw

mzillmmw8#

类型脚本编译器无法找到一个真值来计算,使用valueof方法解决了大多数问题。
在值旁边使用!符号可以解决问题
第一节第一节第一节第一节第一次

相关问题