Typescript: ラムダを使用する場合のVS2013での「this」のデバッグに関する問題

作成日 2015年04月04日  ·  3コメント  ·  ソース: microsoft/TypeScript

「this」のハードコードされたキャプチャを使用して、TypeScriptコードを変換しています。

var _this = this;
var querySucceeded = function(data){
    this.doSomething(data);
}
var test = this.executeQuery().then(function(data){
    _this.querySucceeded(data);
});

ラムダを使用するには:

var querySucceeded = function(data){
    this.doSomething(data);
}
var test = this.executeQuery().then((data) => {
    this.querySucceeded(data);
});

TypeScriptはJSを最初のコードブロックに似たものにコンパイルし、すべてがブラウザで正常に実行されます。 問題は、VisualStudioでデバッグする場合です。 ラムダの後に「this」を調べると、クラスコンテキストではなく、ウィンドウのプロパティが表示されます。

ブラウザで直接デバッグすると、ローカルコンテキストが表示されます。 これは既知の問題ですか? JSファイルとTSファイル間のマッピングに問題があるのではないでしょうか。

VS2013 Update4とTypeScript1.4を使用しています。

Needs Proposal Suggestion Visual Studio

最も参考になるコメント

これは、es5とarrow関数を使用したvsコードの問題です。非常に煩わしいので、より高い優先度で対処する必要があります。

全てのコメント3件

問題は、デバッガーがtypescriptを認識していないことです。認識しているのは、javascriptとソースマップだけです。 ソースマップファイルは、ソース(.ts)からターゲット(.js)へのステートメントのマッピングを一覧表示するだけで、名前が変更された変数(_thisなど)は追跡しません。

私たちはこの問題を認識しており、長年の問題でした。 let、const、destructuring、および計算されたプロパティの変更を使用してこれらの書き換えをさらに行っているため、この問題はより差し迫ったものになっています。

2859が修正されると、これはIE開発者ツールでも「正しく機能する」はずです。つまり、翻訳が非表示になります。 ただし、現時点ではVisualStudioでの配線は行われていません。

これは、es5とarrow関数を使用したvsコードの問題です。非常に煩わしいので、より高い優先度で対処する必要があります。

このページは役に立ちましたか?
0 / 5 - 0 評価