TypeScript 静态类

新手上路,请多包涵

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

在 C# 中,我经常使用静态类来组织变量和方法,将它们放在一个命名类中,而无需实例化对象。在 vanilla JS 中,我曾经使用一个简单的 JS 对象来执行此操作:

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

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

原文由 Rayjax 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 537
2 个回答

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

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

如果您正在寻找将函数/方法放入命名空间(即非全局)的方法,您可以考虑使用 TypeScript 的模块,例如

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

这样你就可以在外部访问Mf(),但不能访问s,并且不能扩展模块。

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

原文由 Marcus 发布,翻译遵循 CC BY-SA 4.0 许可协议

我首选的方法是只使用一个 const 对象(主要是代替枚举):

 const RequestTypes2 = {
    All: 'All types',
    Partners: 'Partners',
    Articles: 'Articles',
} as const; // need the "const" to force the property types to be string literal types (hover RequestTypes2 to see!)

// now you can do this (hover AllowedRequestTypes to see the inferred type)
type AllowedRequestTypes = typeof RequestTypes2[keyof typeof RequestTypes2];

function doRequest(requestType: AllowedRequestTypes) {

}

// these should work
doRequest('Partners');
doRequest(RequestTypes2.All);
doRequest(RequestTypes.Articles);   // the property's type is "Articles" (string literal type)

// this fails
doRequest('Incorrect');

检查 这个 TS 游乐场

原文由 Szilveszter Safar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏