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

distanceZ を計算すると、ブラウザがエラーをスローします。

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

最初の 2 行は完全に機能しますが、3 行目は実際には機能しません。ご覧のとおり、distanceY とまったく同じ計算です。最初に parseFloat() を試みました。しかし、それから、文字列を float にしか解析できず、float を提供しなかったことに文句を言い始めます。

現時点でかなり混乱しているので、助けや解決策をいただければ幸いです。

前もって感謝します!

編集:コードを簡素化しようとしました。距離を非公開にし、セッターとゲッターを追加しました。

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行すべてでエラーが発生しました。

4

3 に答える 3

28

このメソッド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);
于 2016-10-10T11:33:27.790 に答える
0

この問題を回避するために、そのように関数を書くことができます

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

関数に「| string」を追加します

于 2019-04-06T06:09:43.407 に答える