我写了以下代码:
export class ClickHandlers {
static entityNameClickHandler(id) {
console.log("EntityNameClickHandler");
// add the new subTree to the end of historySubTree
this.history.addToHistory(id);
this.refreshEntityContentElem(this);
}
}
在另一个档案中:
addEventListenersToEntityInExplorer(elem, id) {
elem.find('[data-id ^= "expand_"]').click(ClickHandlers.expandButtonHandler);
elem.find('[data-id ^= "entity"]').click(function() {
ClickHandlers.entityNameClickHandler.call(this, id)
}.bind(this));
}
我收到错误的行: this.history.addToHistory(ID); this.refreshEntityContentElem(本);
错误是:
错误:(25,12)TS2339:属性'历史'在类型上不存在 ' typeof ClickHandlers'。
据我所知,Typescript看到了这个'作为类ClickHanlders。但是,我调用了函数' ClickHandlers.entityNameClickHandler'使用' call',所以'这个'不一定是包装对象。
答案 0 :(得分:2)
由于您正在更改函数内的this
,因此您需要告诉编译器
你可以这样做,因为Specifying the type of this for functions的打字稿版本2.0:
type MyType = {
history: any;
refreshEntityContentElem: (obj: any) => void;
}
export class ClickHandlers {
static entityNameClickHandler(this: MyType, id) {
console.log("EntityNameClickHandler");
// add the new subTree to the end of historySubTree
this.history.addToHistory(id);
this.refreshEntityContentElem(this);
}
}
答案 1 :(得分:0)
如果你想使用Typescript,你必须忘记javascript。 即使代码正常工作,Typescript也会抛出错误。它有很多东西,现在你无法做到,但你会得到更清晰的代码,错误更少。
错误:(25,12)TS2339:属性'历史'在类型' typeof ClickHandlers'。
上不存在
此错误表示如果要使用此。[property],则应将此属性定义为类变量或任何父类。
正如我在这里看到的那样:this.refreshEntityContentElem(this);
,我可以理解你应该阅读面向对象编程的教程。