打字稿,固定。类型 'string' 不可分配给类型 'number'

Typescript, toFixed. Type 'string' is not assignable to type 'number'

       distanceX = ((this.frontclickedX  - originX) / originX).toFixed(2);
       distanceY = (-(this.frontclickedY - originY) / originY).toFixed(2);
       let distanceZ: number = (-(this.frontclickedY - originY) / originY).toFixed(2);

我的浏览器在计算距离 Z 时抛出错误:

Type 'string' is not assignable to type 'number'.

前两行工作得很好,但第三行不工作。 如您所见,它甚至与 distanceY 的计算完全相同。我试着先 parseFloat() 它。但是后来它开始抱怨我只能将字符串解析为浮点数,而我没有提供。

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

提前致谢!

编辑:我试图简化我的代码。 将距离设为私有并添加 setter 和 getter。

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);
}

现在我在所有 3 行上都遇到了错误。

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

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;
 }

在您的函数中添加“| string”

试试这个

((this.frontclickedX  - originX) / originX).toFixed(2) as any