Angular 打字稿,固定。类型';字符串';不可分配给类型';编号';

Angular 打字稿,固定。类型';字符串';不可分配给类型';编号';,angular,typescript,tofixed,Angular,Typescript,Tofixed,我的浏览器在计算distanceZ时出错: distanceX = ((this.frontclickedX - originX) / originX).toFixed(2); distanceY = (-(this.frontclickedY - originY) / originY).toFixed(2); let distanceZ: number = (-(this.frontclickedY - originY) / originY).toF

我的浏览器在计算distanceZ时出错:

       distanceX = ((this.frontclickedX  - originX) / originX).toFixed(2);
       distanceY = (-(this.frontclickedY - originY) / originY).toFixed(2);
       let distanceZ: number = (-(this.frontclickedY - originY) / originY).toFixed(2);
前两行工作得很好,但第三行实际上不工作。 正如你所看到的,它甚至与距离的计算完全相同。我试着先解析它。但随后它开始抱怨我只能将字符串解析为浮点,而我没有提供浮点

我现在很困惑,所以非常感谢您的帮助或解决方案

提前谢谢

编辑:我试图简化我的代码。 使距离私有化,并增加二传手和接球手

Type 'string' is not assignable to type 'number'.
现在我在所有3行上都出现了错误。

方法
toFixed()
将数字转换为字符串。 您必须将变量解析为数字:

private _distanceX: number;
private _distanceY: number;
private _distanceZ: number;

  get distanceZ(): number {
    return this._distanceZ;
}
set distanceZ(value: number) {
    this._distanceZ = value;
} ...
calculateBadgeDistance(): void{
        this.distanceX = (5.001).toFixed(2);
        this.distanceY = (5.001).toFixed(2);
        this.distanceZ = (5.001).toFixed(2);
}
或者,临时存储该字符串,稍后再对其进行分析

let distanceZ:number = parseFloat((-(this.frontclickedY - originY) / originY).toFixed(2));

您可以这样编写函数以避免此问题

let distanceZTxt:string = (-(this.frontclickedY - originY) / originY).toFixed(2);
let distanceZ:number = parseFloat(distanceZTxt);
在函数中添加“|字符串”

试试这个

get distanceZ(): number | string {
    return this._distanceZ;
 }

这在哪一行发生?如果变量都是数字的话,这个剪下来的应该可以用了。这对我现在有用了。但你知道为什么它对dinstanceX有效,对distanceY有效,而对distanceZ无效吗?非常感谢您的修复:)也许您一开始没有为
distanceY
distanceX
定义任何类型?如果不是,变量将接受任何数据类型
private\u距离:数字
private\u distanceZ:数字如果它们都是用数据类型编号定义的,则所有变量都会发生错误,除非您将它们从字符串解析为数字。我看到,在更新的代码中,您将它们定义为数字,但您确定在第一次尝试中它们是数字吗?是的,我在函数中这样定义了它们:
让distanceX,distanceY,distanceZ:number
((this.frontclickedX  - originX) / originX).toFixed(2) as any