首页 > 解决方案 > Typescript 中私有构造函数和受保护构造函数的用途是什么

问题描述

我注意到在 Typescript 中,您可以将构造函数定义为带有任何访问修饰符(私有、受保护、公共)。有人可以举一个有效的例子来说明如何在 Typescript 中使用私有和受保护的构造函数吗?

示例这是 Typescript 中的有效代码:

class A
{
    private constructor()
    {
        console.log("hello");
    }
}

标签: typescript

解决方案


就像在其他语言中一样,它的用法实际上是不允许任何人(类本身除外)实例化该类。例如,对于只有静态方法的类(Typescript 中很少见,因为有更简单的方法可以做到这一点),或者允许简单的单例实现,这可能很有用:

class A
{
    private constructor()
    {
        console.log("hello");
    }

    private static _a :A
    static get(): A{
        return A._a || (A._a = new A())
    }
}

或者需要使用工厂函数的特殊初始化要求。例如异步初始化:

class A
{
    private constructor()
    {
        console.log("hello");
    }

    private init() :Promise<void>{} 
    static async create(): Promise<A>{
        let a = new A()
        await a.init();
        return a;
    }
}

推荐阅读