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
、これは適切な動作ではありません。