我有一个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可以窥视并阻止我输入愚蠢的东西。