我想从传统的JS迁移到TypeScript,因为我喜欢类似C#的语法。我的问题是我不知道如何在TypeScript中声明静态类。
在C#中,我经常使用静态类来组织变量和方法,将它们放在一个命名类中,而不需要实例化对象。在普通的JS中,我过去常常使用一个简单的JS对象来完成此操作:
var myStaticClass = {
property: 10,
method: function(){}
}在TypeScript中,我更愿意使用C-sharpy方法,但是在TS中似乎不存在静态类。此问题的适当解决方案是什么?
发布于 2012-11-04 03:24:49
TypeScript不是C#,所以您不应该期望在TypeScript中使用相同的C#概念。问题是为什么你想要静态类?
在C#中,静态类只是一个不能被子类化的类,它必须只包含静态方法。C#不允许在类之外定义函数。然而,在TypeScript中,这是可能的。
如果你正在寻找一种方法将你的函数/方法放在一个命名空间中(即不是全局的),你可以考虑使用TypeScript的模块,例如
module M {
var s = "hello";
export function f() {
return s;
}
}这样您就可以从外部访问M.f(),但不能访问s,并且不能扩展模块。
有关更多详细信息,请参阅TypeScript specification。
发布于 2012-11-05 03:54:39
自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发布于 2012-11-04 03:31:27
定义类的静态属性和方法在Typescript Language Specification的8.2.1中进行了介绍
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()是静态(或“类”)方法。
https://stackoverflow.com/questions/13212521
复制相似问题