我正在创建一个对象(一个虚拟的http响应对象),如下所示:
res = {
body : '',
write : (text : string) => {
this.body = this.body + text;
},
end : () => {}
};
但是打字稿编译器给出了错误:
错误TS2108:'这个'不能在模块体内引用。
我知道在javascript中这是可能的(在对象中有this
),如何在打字稿中完成此操作?
答案 0 :(得分:2)
您可以通过将箭头函数write
更改为标准函数来完成它,然后它将通常在纯JavaScript中工作。
res = {
body : '',
write : function(text: string) {
this.body = this.body + text;
},
end : () => {}
};
这是因为箭头功能如何改变this
在其中的工作方式。这是很好的描述here。
标准函数(即使用函数关键字编写)将会 根据执行上下文动态绑定此(就像在 另一方面,JavaScript),箭头功能将保留 附上背景。这是一个有意识的设计决定,如箭头 ECMAScript 6中的函数旨在解决一些问题 与动态绑定相关联(例如,使用函数调用) 图案)。
答案 1 :(得分:0)
在大卫提交(正确)答案之前,我设法找到了解决办法。它没有回答我自己的问题,但这是一个可能的解决方案。
创建class Response
:
class Response {
body : string;
constructor() {
this.body = '';
}
write(text : string) {
this.body = this.body + text;
}
end() {}
}
然后将res
设为Response
类型的对象:
res = new Response();