防止 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