TypeScript 静态类

2022-08-30 01:34:11

我想从传统的JS迁移到TypeScript,因为我喜欢类似C#的语法。我的问题是我无法找到如何在TypeScript中声明静态类。

在 C# 中,我经常使用静态类来组织变量和方法,将它们放在一个命名的类中,而无需初始化对象。在vanilla JS中,我曾经使用一个简单的JS对象来做到这一点:

var myStaticClass = {
    property: 10,
    method: function(){}
}

在TypeScript中,我宁愿采用我的C-sharpy方法,但似乎静态类在TS中不存在。此问题的适当解决方案是什么?


答案 1

自 TypeScript 1.6 以来,抽象类一直是 TypeScript 的一等公民。不能实例化抽象类。

下面是一个示例:

export abstract class MyClass {         
    public static myProp = "Hello";

    public static doSomething(): string {
      return "World";
    }
}

const okay = MyClass.doSomething();

//const errors = new MyClass(); // Error

答案 2

TypeScript 不是 C#,所以你不应该期望 TypeScript 中 C# 的相同概念。问题是为什么想要静态类?

在 C# 中,静态类只是一个无法进行子类化且必须仅包含静态方法的类。C#不允许在类之外定义函数。然而,在TypeScript中,这是可能的。

如果你正在寻找一种方法将函数/方法放在命名空间中(即不是全局的),你可以考虑使用TypeScript的模块,例如

module M {
    var s = "hello";
    export function f() {
        return s;
    }
}

这样,您就可以从外部访问 M.f(),但不能访问 s,并且不能扩展模块。

有关更多详细信息,请参阅 TypeScript 规范