当我将函数引用作为参数传递给另一个函数,然后在某处调用它时,它会丢失"this"。为了防止它,我必须将方法转换为箭头功能。以下是我的意思的例证:
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 可以警告我吗?因为我讨厌运行时错误,因为它们可以在编译时被捕获,这就是为什么我首先使用 TypeScript(我非常喜欢严格类型的语言(。现在,为了防止它,我使所有方法都成为箭头函数,这对继承不利。
您知道任何 tsconfig 条目或 tslint 条目?
不,没有办法直接警告这一点。
有人建议ESLint实现它,但未实施。
您可以做的是使用仅箭头函数 TSLint 规则来防止行为首先发生。