Typescript 缺少这个定义
我在对象中定义了一个函数,如下所示:Typescript 缺少这个定义,typescript,Typescript,我在对象中定义了一个函数,如下所示: connect(callback?: (connected: bool) => void) { $.ajax(this.url + "/connect", $.extend(true, {}, this.ajaxSettings, { success: (data) => { this.errorChecker(data, (data) => {
connect(callback?: (connected: bool) => void) {
$.ajax(this.url + "/connect", $.extend(true, {}, this.ajaxSettings, {
success: (data) => {
this.errorChecker(data, (data) => {
if (callback != null) {
callback(data);
}
});
},
timeout: this.timeout,
error: () => {
if (callback != null) {
callback(false);
}
}
}));
}
TypeScript编译器接受该值并生成以下内容:
VAS.prototype.connect = function (callback) {
$.ajax(this.url + "/connect", $.extend(true, {
}, this.ajaxSettings, {
success: function (data) {
_this.errorChecker(data, function (data) {
if(callback != null) {
callback(data);
}
});
},
timeout: this.timeout,
error: function () {
if(callback != null) {
callback(false);
}
}
}));
};
请注意js中的这一行:
\u此.errorChecker(数据、函数(数据)
编译器已经正确地注意到我使用了=>运算符,并得出结论,在我的原始TypeScript中,this
应该引用父对象,而不是实际调用成功回调时发生的任何this
。但是,出于某种原因,编译器忘记了包含魔线:
var _this = this;
在函数的开头。这是一个bug吗?还是这是设计的?如果它完全忽略了_this/这件事,我会说我做错了,但它已经走了一半,这让我觉得有些地方错了
更新:奇怪的是,Visual Studio中的编译器似乎存在问题,如果我将相同的代码复制到系统中,它将按预期工作。这看起来像一个bug。你应该打开一个窗口来跟踪它。是的,我也这么认为,但我总是希望确保我没有遗漏一些明显的东西。我提交了一个bug。