Mehr Spaß mit TypeScript: Klassenschnittstellen

Man kann in TypeScript ja über die new() Funktion Konstruktoren insbesondere auch in Schnittstellen referenzieren. Schauen wir uns dazu einmal folgendes Beispiel an:

interface IAnyFactory<TAny> {
new (param: string): TAny;
greeting: string;
}

class Any {
static greeting = "Hi";
constructor(private _param: string) {}
}

function create<TAny>(factory: IAnyFactory<TAny>): TAny { return new factory("test"); }
function testAny(): Any { return create(Any); }
Ich kann an die Funktion create erst einmal irgendeine Klasse übergeben, wo dann tatsächlich der Konstruktor als Parameter verwendet wird. Alle statischen Felder und Methoden einer Klasse sind aber in JavaScript einfach nur die Eigenschaften dieser Funktion. Über die Schnittstelle IAnyFactory verlangt create, dass nur solche Klassen verwendet werden dürfen, die zusätzlich auch ein statisches Feld greeting der Art string haben. Ich kann mir vorstellen, dass dieses Verhalten ganz praktisch sein kann: man hat hier quasi so etwas wie eine Schnittstellendefinition für eine Klasse!

Happy Coding

Jochen