2016-12-12 2 views
0

typescriptでコーディングするときに奇妙な問題が発生しました。何とか2> 100 == true(?)。Typescript:2> 100 == true

と私は本当にそれを把握するカントは...ここで

が私のコードです:

if (!this.multipleYAxis) { 
    for (let d of this.getDatasources()) { 
     let options = this.getGraphTypeOption(d.id); 
     console.log(this.yMax + ' < ' + options.max); 
     console.log(this.yMax < options.max); 
     if (this.yMax < options.max) 
      this.yMax = options.max; 

     if (this.yMin > options.min) 
      this.yMin = options.min; 
    } 

    if (this.getChart().yAxis[1] != undefined) { 
     this.getChart().yAxis[1].update({ 
     max: this.yMax 
    }); 

    this.getChart().yAxis[1].update({ 
      min: this.yMin 
     }); 
    } 
} 

yMinのとyMaxのは次のように宣言されています

private yMin: number = 0; 
private yMax: number = 0; 

オプションは、次のように宣言されています:

export interface GraphTypeOption { 
    ... 
    max: number; 
    min: number; 
    ... 
} 

現在テスト中のコードは2つのデータソースを実行しています。したがって、forループは2回実行されます。

これは私の出力である:クローム開発ツールのコンソールで、私がtrueに100 < 2を得ることができます

100 < 100 
false 
100 < 2 
true 

唯一の方法は、中に入力して、「100」<「2」が、あなたは私の中で見ることができるようにされます宣言this.yMaxoptions.maxは明らかにint/numberの型です。コンパイラは、キャスト関数がstring型の変数を必要とするため、それらをintにキャストしたいと思っていても好きではありません。

誰でもこのトラブルの原因を知っていますか?それはそれを台無しにtypescript - > javascriptですか?あなたがしている、その後、trueとして100 < 2を見ている場合

+3

私はあなたが文字列を比較していることを確認しています。 –

+0

'console.log(this.yMax、 '<'、options.max);'これは、少なくとも1つが文字列であることを証明します –

+0

コンパイル警告はありますか? 'typeof this.yMax'のロギングはどうですか? – MaxArt

答えて

6

あなたは私の宣言this.yMaxとoptions.maxで見ることができるように、明確にint型/数

そして、まだのタイプです型の注釈にもかかわらず、文字列を比較します。デバッガを使用して、比較しているものの価値を調べます。あなたは"100""2"であり、1002ではありません。それから、文字列である根本的な原因を見つけることができます。

無償例:

console.log("100" < "2"); // true 
 
console.log(100 < 2);  // false

+0

あなたのような文字列がすべて示唆され、私は疑いがある。どのようにtypescriptに入りますか?数字で宣言しますが、結果は文字列です。 –

+0

@PresidentCamacho:コンパイルすると、TypeScriptの型名が消えます。どうやら、ある段階では、TypeScriptが約束した文字列である数字を取得していますが、そうではありません。 –

+0

これを機能させるために私が代わりにやっているはずのことは何をお勧めしますか?私はいつもこのようにして、これが初めてこの問題を抱えています。 –

関連する問題