関数参照を別の関数のパラメータとして渡してどこかに呼び出すと、 "this"が失われます。それを防ぐには、メソッドを矢印関数にする必要があります。ここで私が何を意味するかの実例である:メソッド参照を渡すと、TSに警告が出る
class Meeseeks{
private line="I'm mister Meeseeks";
lookAtMe(){ console.log(this.line+', look at me!'); }
}
// somewhere else:
let mr = new Meeseeks();
mr.lookAtMe();/// ok, prints fine
function callIt(fn:Function){ fn(); }
callIt(mr.lookAtMe);/// this one throws "Uncaught TypeError: Cannot read property 'line' of undefined"
だから、それを修正する唯一の方法は、矢印関数に「lookAtMe」を有効にすることです:
lookAtMe =() => console.log(this.line+', look at me!');
私の質問は:活字体は、ときに私を警告することができ私は関数参照を使用しますか?コンパイル時に実行時エラーが発生するのを嫌うので、これが最初の場所でTypeScriptを使用する理由です(厳密に型指定された言語が非常に好きです)。そして今、それを防ぐために、私はすべてメソッドの矢印関数を作成し、継承には向いていません。
ご存知のtsconfigエントリまたはtslintエントリはありますか?
あなたが求めているものではありませんが、これはコンストラクタのいくつかの 'bind'によって防止できます。 – Jokester