TypeScript:如何在没有构造函数的情况下在类内部调用静态函数?

问题描述 投票:1回答:1

我有一个类,我们称它为 CoolClass 我在我的代码中一直使用它来访问它的静态属性。然而,我的代码中有一个设置步骤 CoolClass 作为我的类的一部分,我把它定义为一个函数,我们称它为 doSetupStuff(). 为了让它启动,我通过设置一个静态的 dummy 变量。

这是我目前的解决方案,它是有效的。

export default class CoolClass {
    public static readonly something = 'cool';
    public static readonly somethingelse = 12345;

    // GOAL: how can we call doSomeStuff() only once, without setting this 'dummy' variable?
    public static readonly dummy = CoolClass.doSetupStuff();

    public static doSetupStuff(): void {
        console.log('doing setup...');
        // more logic here...
    }
}

但我觉得这是不正确的,因为我从来没有真正需要过。CoolClass.dummy - 我只需要运行 doSetupStuff().

我知道我可以做到这一点,但我不能静态地使用CoolClass

export default class CoolClass {
    public static readonly something = 'cool';
    public static readonly somethingelse = 12345;

    constructor() {
        this.doSetupStuff();
    }

    public doSetupStuff(): void {
        console.log('doing setup...');
        // more logic here...
    }
}

但我不能静态地使用CoolClass。(也就是说,我必须调用 new 每次我想在我的代码的其他部分使用它)。)

当然,没有必要在我的代码中设置一个 dummy 变量,就像我现在的解决方案一样。有人有什么办法吗?如果需要的话,我可以把完整的代码贴出来,虽然我相信这和我想实现的模式无关。

typescript class oop constructor static
1个回答
4
投票

我想我可能会声明它,设置它,然后导出它。

class CoolClass {
    public static readonly something = 'cool';
    public static readonly somethingelse = 12345;

    public static doSetupStuff(): void {
        console.log('yay!');
    }
}
CoolClass.doSetupStuff();
export default CoolClass;

也就是说,有了 doSetupStuff 是公共的可能不太理想,除非它是为了被类的用户调用。如果它只对类的公共方面起作用,你可以隐藏这个函数。

class CoolClass {
    public static readonly something = 'cool';
    public static readonly somethingelse = 12345;
}
function doSetupStuff(): void {
    console.log('yay!');
}
doSetupStuff();
export default CoolClass;

尽管如此,我还是想用一个单人函数来代替。

class CoolClass {
    public readonly something = 'cool';
    public readonly somethingelse = 12345;

    constructor() {
        console.log('yay!'); // Setup here...
    }
}
export default new CoolClass();
© www.soinside.com 2019 - 2024. All rights reserved.