访问私有构造函数

Accessing a private constructor

我有一个带有私有构造函数的 Typescript class:

class Foo {
  private constructor(private x: number) {}
}

出于测试目的,我想从 class 外部调用此构造函数(请不要争论这一点)。 Typescript 提供了一种用于访问私有字段的转义方法,例如 foo["x"](请参阅 this other question),但我无法弄清楚调用构造函数的语法。应该是这样吧?

const f = new Foo["constructor"](5);

但这不起作用。正确的语法是什么?

您可以将 Foo 断言为 any:

class Foo {
    private constructor(private x: number) {}
}

const instance = new (Foo as any)(5) as Foo;
console.log(instance);

但也许您可能只想创建一个静态方法来构造一个具有明确名称的实例,用于测试:

class Foo {
    private constructor(private x: number) {}

    /** @internal */
    static createForTesting(x: number) {
        return new Foo(x);
    }
}

const instance = Foo.createForTesting(5);

注意:/** @internal */ 排除方法声明出现在声明文件中。