-1

TypeScript v1.7.5 を使用すると、 のコンテキストがthis混乱しているか、正しくトランスパイルされていないように見えます。または、何かが足りない。アロー関数の内側は、関数の外側thisと同じものを参照していると思っていたのに、変化しています。this私は状況をデバッグしました。結果は以下のコメントに示されています。

ソースTS

// Debug: "this" is an instance of the class -- good.
FS.exists(dbPath, (exists: boolean) => {
    // Debug: "this" is an instance of the global object -- not good.
    ...
});

結果の JS (ES5)

FS.exists(dbPath, function (exists) {
    ...
});

結果の JS が次のようにコールバックをバインドすることを期待していました。

FS.exists(dbPath, function (exists) {
    ...
}.bind(this));

thisコールバック内の値を保持する必要があるため、コード全体でアロー関数を使用しています。しかし、なぜこれが正しく機能していないように見えるのか、私は混乱しています。

ノート

thisアロー関数内で具体的に使用しようとする場合に限り、 TypeScript は次の回避策を作成します。

var _this = this;

FS.exists(dbPath, function (exists) {
    var _x = this;
});

わかりました。でも、bind を使用したほうがよいのではないでしょうか。これは、アロー関数内から関数を呼び出す問題をまだ解決していません。これらの関数呼び出しは のコンテキストを失いますがthis、これは適切な動作ではありません。

4

1 に答える 1