防止 TypeScript public 函数调用私有函数
Prevent TypeScript public function calling a private function
我有这个class:
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
class:我想更改 AlgoliaAppId 名称并防止 resetParams
来自 运行ning。 (无法编辑原文class)。
有没有什么方法可以覆盖 resetParams
,即使它是私有的,或者至少以某种方式对 initTemplate 方法进行猴子修补,这样它就不会 运行 行 this.resetParams
?
没有(干净的)方法可以从您无法控制的基础 class 中覆盖 private
方法。我尝试了一些模块扩充,看看是否可以将修饰符更改为 protected
但运气不佳; TypeScript 似乎希望所有重载都具有相同的修饰符。
但是,我能够在 class 声明之后修补原型以破解过载,代价是包含 @ts-expect-error
注释。似乎是与编译器战斗的阻力最小的路径。下面是 subclass 的示例:
class Example extends ResourceFactory {
AlgoliaAppId = "CustomName";
}
// @ts-expect-error
Example.prototype.resetParams = function resetParams() {
// your implementation
}
这里还有一个link to the playground。
我有这个class:
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
class:我想更改 AlgoliaAppId 名称并防止 resetParams
来自 运行ning。 (无法编辑原文class)。
有没有什么方法可以覆盖 resetParams
,即使它是私有的,或者至少以某种方式对 initTemplate 方法进行猴子修补,这样它就不会 运行 行 this.resetParams
?
没有(干净的)方法可以从您无法控制的基础 class 中覆盖 private
方法。我尝试了一些模块扩充,看看是否可以将修饰符更改为 protected
但运气不佳; TypeScript 似乎希望所有重载都具有相同的修饰符。
但是,我能够在 class 声明之后修补原型以破解过载,代价是包含 @ts-expect-error
注释。似乎是与编译器战斗的阻力最小的路径。下面是 subclass 的示例:
class Example extends ResourceFactory {
AlgoliaAppId = "CustomName";
}
// @ts-expect-error
Example.prototype.resetParams = function resetParams() {
// your implementation
}
这里还有一个link to the playground。