1 interface Dimensions {
2 width: Number,
3 height: Number
4 }
5
6 function findArea(dimensions: Dimensions): Number {
7 return dimensions.height * dimensions.width;
8 }
第7行,dimensions.height
和dimensions.width
算术运算的左侧必须是'any'类型, 'number'或枚举类型。
我正在努力消除红色波浪形,但我很难过为什么这个打字稿编译器会给我一个错误。据我所知,宽度和高度都是数字类型。
答案 0 :(得分:46)
这里是发生此错误的另一个示例,可能会对人们有所帮助。
如果您使用打字稿并尝试计算日期之间的差异(就我而言,我试图使用数据库中的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
返回了number
,因此该操作有效。
但是,打字稿不喜欢它。也许有一个编译器选项可以强制这种约束,我不知道。
new Date().valueOf()
1584233296463
您可以通过明确地使操作数为数字(bigint)类型来进行修复,以便-
起作用。
固定示例
new Date("2020-03-15T00:47:38.813Z").valueOf() - new Date("2020-03-15T00:47:24.676Z").valueOf()
答案 1 :(得分:33)
Number
应为小写:number
。
答案 2 :(得分:0)
src/app/demo.component.ts(...) 中的错误:错误 TS2362:算术运算的左侧必须是“任何”、“数字”或枚举类型。>
package.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();
答案 3 :(得分:0)
您可以将表达式转换为数字。
function findArea(dimensions: Dimensions): Number {
return Number(dimensions.height) * Number(dimensions.width);
}