Solución:
Las clases abstractas han sido un ciudadano de primera clase de TypeScript desde TypeScript 1.6. No puede crear una instancia de una clase abstracta.
Aquí hay un ejemplo:
export abstract class MyClass {
public static myProp = "Hello";
public static doSomething(): string {
return "World";
}
}
const okay = MyClass.doSomething();
//const errors = new MyClass(); // Error
TypeScript no es C #, por lo que no debe esperar necesariamente los mismos conceptos de C # en TypeScript. La pregunta es ¿por qué quieres clases estáticas?
En C #, una clase estática es simplemente una clase que no puede ser subclasificada y debe contener solo métodos estáticos. C # no permite definir funciones fuera de las clases. Sin embargo, en TypeScript esto es posible.
Si está buscando una forma de poner sus funciones / métodos en un espacio de nombres (es decir, no global), podría considerar usar los módulos de TypeScript, por ejemplo
module M {
var s = "hello";
export function f() {
return s;
}
}
Para que pueda acceder a Mf () externamente, pero no a s, y no pueda extender el módulo.
Consulte la especificación de TypeScript para obtener más detalles.
La definición de las propiedades estáticas y los métodos de una clase se describe en 8.2.1 de la Especificación del lenguaje mecanografiado:
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);
}
}
dónde Point.distance()
es un método estático (o “clase”).