如何对动态方法进行类型检查?

时间:2019-07-17 21:45:26

标签: typescript dynamic runtime typechecking

我有一个TS对象,该对象将某些操作委派给另一个类实例。但是由于此实例是在运行时创建的,因此我无法在方法调用上进行类型检查。 像这样:


    // main bot class
    class TixBot extends BaseBot implements IBot  {

      public actions: BotActions

      constructor(room: IRoom) {
        super()
        // based on situation we may delegate to a different actions bot
        this.actions = new TixyActions(this)
      }

    }

    // class to handle actions varies by bot
    class TixyActions implements BotActions {

      public helpText(lang: ILang): string {
        return "something"
      }
    }

所以在其他代码中,我有一个TixBot的实例 并尝试调用其内部参考的actions.helpText()

    tixbotInstance.actions.helpText('en')

但是我对此方法没有任何类型检查。 到目前为止,typedef看起来像这样:

    //types/index.d.ts

    export interface BotActions {
      helpText(lang: ILang): string
    }

    export interface IBot {
      actions: IBotActions

那么有没有一种方法可以使用强制转换或类型防护,或者可以让我在VScode中查看所有动作的东西?

没有引发实际错误,但方法上没有类型检查或VSCode智能感知。

例如,我可以键入它而没有编译时问题,这是动态实例上不存在的方法。

    const introText:string = tixy.actions.foo() // no error!!

tixy.actions即使是在运行时创建的,也确实具有声明的类型/接口,因此我本以为TS可以窥视并阻止我输入愚蠢的东西。

0 个答案:

没有答案