让打字稿知道对象是什么类型

时间:2016-08-13 05:20:39

标签: typescript types

我正在编写一个允许用户指定回调的库。像这样:

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但是作为一个单独的函数时,就会遇到挑战。

对此有何建议或想法?

1 个答案:

答案 0 :(得分:1)

您可以使用arrow function来保存this的上下文:

MsgBox.getInput({
     context: this,
     okCallback: (value) => {
        this.accessToEnclosingClass
     }
}

编译器(和IDE)也会理解这一点,因此不会将this视为任何内容。