我正在编写一个允许用户指定回调的库。像这样:
interface IParams {
context: any;
okCallback: (value: string) => void
... etc ...
}
class MsgBox {
static getInput(params: IParams) {
....
okCallback.call(params.context, value);
}
}
上下文的目的是将回调放在上下文中。例如,我可以这样做:
MsgBox.getInput({
context: this,
okCallback(value) {
this.accessToEnclosingClass
}
}
由于回调需要访问调用类的属性。这比在整个地方使用$ .proxy()更方便。
这是正常的,但是,问题在于typescript编译器。在回调打字稿中不知道this
的类型,所以对待它就像任何一样,并且不对我做任何类型检查,这会导致很多挫折。
有没有办法让Typescript编译器知道这个上下文中this
的类型是什么?我能做到:
okCallback(value) {
const self = this as EnclosingClassType;
self.accessToEnclosingClass
}
哪个有用,但我宁愿使用this
(因为否则有机会意外使用this
,导致可能的非编译类型错误。
当然这是一个简单的例子,当this
上下文中没有定义okCallback但是作为一个单独的函数时,就会遇到挑战。
对此有何建议或想法?
答案 0 :(得分:1)
您可以使用arrow function来保存this
的上下文:
MsgBox.getInput({
context: this,
okCallback: (value) => {
this.accessToEnclosingClass
}
}
编译器(和IDE)也会理解这一点,因此不会将this
视为任何内容。