我有这样一个类:
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
}
这里还有一个到操场的链接。