防止TypeScript公共函数调用私有函数



我有这样一个类:

export class ResourceFactory {
AlgoliaAppId = "AlgoliaAppId";
// ...
private resetParams() {
this.AlgoliaAppId = "AlgoliaAppId";
// ...
}
public initTemplate(objectName, directiveArgs): Template {
this.resetParams();  // <-- Can I, in any possible way, prevent this line from running?
this.AlgoliaAppId = `${this.AlgoliaAppId}${objectName}`;
// ... [long function content which I don't want to duplicate]
}
}

我想扩展ResourceFactory类:我想改变AlgoliaAppId的名字,防止resetParams运行。(我不能编辑原来的类)。

是否有任何方法覆盖resetParams,即使它是私有的,或者至少以某种方式猴子补丁initTemplate方法,所以它不会运行this.resetParams行?

没有(干净的)方法可以从您无法控制的基类重写private方法。我尝试了一些模块增强,看看我是否可以改变修改器protected,但没有太多的运气;TypeScript似乎希望所有的重载都有相同的修饰符。

然而,我能够在类声明之后修补原型以破解重载,代价是包括@ts-expect-error注释。似乎是与编译器斗争的阻力最小的路径。下面是一个子类的示例:

class Example extends ResourceFactory {
AlgoliaAppId = "CustomName";
}
// @ts-expect-error
Example.prototype.resetParams = function resetParams() { 
// your implementation
}

这里还有一个到操场的链接。

相关内容

  • 没有找到相关文章

最新更新