2016-11-30 3 views
4

この特定のコードをコンパイルする際に問題があります(これはAngular2プロジェクトのものです)。Typescriptコンパイラは角括弧を追加しませんか?

typescriptバージョン2.0.10(npm以降)を使用すると、これは私が得る出力です。

GlobalViewComponent.prototype.reloadRecords = function() { 
    var _this = this; 
    var step = (this.timeInterval.max - this.timeInterval.min)/this.recordsChartSteps; 
    var data = new Array(this.recordsChartSteps); 
    var labels = new Array(this.recordsChartSteps); 
    var doneCount = 0; 
    var done = new core_1.EventEmitter(); 
    done.subscribe(function() { 
     _this.recordsChartData[0].data = data; 
     _this.recordsChartLabels = labels; 
    }); 
    if (this.timeInterval.min == 0) 
     this.data.getRecordCount(this.timeInterval.min, this.timeInterval.max).subscribe(function (count) { 
      data[data.length - 1] = count; 
      labels[labels.length - 1] = "Total"; 
      done.emit(); 
     }); 
    else 
     var _loop_1 = function(i) { 
      var min = this_1.timeInterval.min + step * i; 
      var max = min + step - 1; 
      this_1.data.getRecordCount(min, max) 
       .subscribe(function (count) { 
       data[i] = count; 
       labels[i] = "De " + new Date(min).toLocaleTimeString() + " à " + new Date(max).toLocaleTimeString(); 
       if (++doneCount >= _this.recordsChartSteps) 
        done.emit(); 
      }); 
     }; 
     var this_1 = this; 
     for (var i = 0; i < this.recordsChartSteps; i++) { 
      _loop_1(i); 
     } 
}; 

それは有効なJavaScriptコードである、しかしそれは、コンパイラは、他のブロックの内容のために必要なブラケットを追加しなかったようです。

これは、私のTypescriptコードにこれらの括弧を追加していないという事実のためです。else文には1つのブロックが含まれています(括弧は不要です。 。

しかし、Javascriptでは、elseブロック(Typescriptの1つのforループ)が複数のステートメントに出力されます。

indendationも見ることができますが、_loop_1変数を宣言した最初の2つの命令は、このelseブロックにも含める必要があります。

明らかに、私のTypescriptコードに角括弧を追加するだけで問題を解決できることは明らかです(間違いなく、より良い習慣かもしれません)。

これらの括弧を入れないのは間違いでしたか、これは私が報告すべきコンパイラの問題ですか?

NB:英語は私の主要言語ではありません。

+1

[GithubのTSチームに]問題を追加できると思います(https://github.com/Microsoft/TypeScript/issues)。 :) – Paleo

答えて

2

はい、これはバグのようです。報告する必要があります。ここでは簡単単純化された再現:

​​

Playground link.

コードは間違いなく何もしてはならない、とあなたはそれが私の地元のChromeでコンパイルされていない実行している場合、それはそうないこと。 TypeScriptを使用して実行すると、代わりに 'Uncaught TypeError:_loop_1が関数ではありません'がスローされます。素晴らしい発見!

+0

ありがとうございました。私はそれを報告します。 – elliottv

関連する問題