首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript静态类

问TypeScript静态类
EN

Stack Overflow用户
提问于 2012-11-04 03:08:38
回答 15查看 212.6K关注 0票数 176

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

在C#中,我经常使用静态类来组织变量和方法,将它们放在一个命名类中,而不需要实例化对象。在普通的JS中,我过去常常使用一个简单的JS对象来完成此操作:

代码语言:javascript
复制
var myStaticClass = {
    property: 10,
    method: function(){}
}

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

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2012-11-04 03:24:49

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

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

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

代码语言:javascript
复制
module M {
    var s = "hello";
    export function f() {
        return s;
    }
}

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

有关更多详细信息,请参阅TypeScript specification。

票数 182
EN

Stack Overflow用户

发布于 2012-11-05 03:54:39

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

下面是一个示例:

代码语言:javascript
复制
export abstract class MyClass {         
    public static myProp = "Hello";

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

const okay = MyClass.doSomething();

//const errors = new MyClass(); // Error
票数 237
EN

Stack Overflow用户

发布于 2012-11-04 03:31:27

定义类的静态属性和方法在Typescript Language Specification的8.2.1中进行了介绍

代码语言:javascript
复制
class Point { 
  constructor(public x: number, public y: number) { 
    throw new Error('cannot instantiate using a static class');
  } 
  public distance(p: Point) { 
    var dx = this.x - p.x; 
    var dy = this.y - p.y; 
    return Math.sqrt(dx * dx + dy * dy); 
  } 
  static origin = new Point(0, 0); 
  static distance(p1: Point, p2: Point) { 
    return p1.distance(p2); 
  } 
}

其中Point.distance()是静态(或“类”)方法。

票数 74
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13212521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档