2016-09-25 4 views
0

Ich erstelle ein Datenmodell Paradigma mit Typoskript. Ich speichere verschiedene Arten von Daten an verschiedenen Orten (SQL, ein lokaler Cache). Ich möchte eine abstrakte Klasse erstellen, die alle Methoden enthält, die ich für jede Art von Datenspeicher benötigen würde (erstellen, finden, aktualisieren, zählen, zerstören). Auf diese Weise konnte ich diese Klasse erweitern und für verschiedene Speicherarten anders implementieren, und der Compiler würde mich warnen, wenn mir eine Methode fehlen würde. Ich würde dann eine dieser Implementierungen in einer Klasse erweitern, die das Datenmodell beschreibt. Einige der Methoden, die ich benötige (wie Suchen und Erstellen), sind jedoch statisch. Ich weiß, dass Typoskript abstrakte statische Methoden nicht unterstützt. Gibt es etwas Ähnliches wie abstrakte Methoden, die ich verwenden könnte, so warnt der Compiler mich vor fehlenden Methoden?Version der abstrakten Methoden für statische Methoden in TypeScript

Ich möchte auch, dass diese statischen Methoden generische und typisierte die gleiche wie die Klasse. Ich weiß, dass dies für eine generische Standardklasse keinen Sinn ergibt. Da diese Klasse jedoch immer erweitert und niemals instanziiert wird, könnte ich dann die generische Klasse eingeben, wenn ich sie erweitere und automatisch den generischen Typ der statischen Methoden aktualisiere?

Antwort

2

Gibt es so etwas wie abstrakte Methoden, die ich so der Compiler mich über fehlende Methoden warnt

nicht eingebaut, so dass Sie nicht einfach durch gute Fehlermeldungen erhalten

// WILL NOT COMPILE. SAMPLE 
class Foo { 
    abstract static X() { } 
} 

class Bar extends Foo { // Error here please 
} 

verwenden könnte Sie können jedoch Tricks wie Typkompatibilität verwenden, um Folgendes zu gewährleisten:

Beispielimplementierung:

interface FooAbstract { 
    X(): any; 
} 
let _ensureAbstractMatch: FooAbstract; 
class Foo { 
} 

class Bar extends Foo { 
    static X() { } 
} 
_ensureAbstractMatch = Bar; // OKAY 
+0

Ich denke, es könnte einfacher sein, das Singleton-Muster zu verwenden, ein generisches Singleton-Objekt mit Methoden anstelle von statischen Methoden zu schaffen dann mit einer Schnittstelle oder abstrakter Klasse, den generischen Objekttyp, der die notwendigen Methoden hat für jedes Objekt. Denken Sie, dass das ein guter Ansatz ist? – user5505266

+0

'Glaubst du, das ist ein guter Ansatz? Wenn es funktioniert, dann ja – basarat