2016-04-08 6 views
2

ich eine instantiator Funktion haben, die eine Instanz der bereitgestellten Klasse zurückgibt:Typ für Funktion, die eine Klasse als Argument annimmt, und gibt eine Instanz der Klasse

declare type ClassType = { new(): any }; // alias "ParameterlessConstructor" 

function getInstance(constructor: ClassType): any { 
    return new constructor(); 
} 

Wie konnte ich es so, dass die Funktion machen gibt eine Instanz des constructor Arguments anstelle von any zurück, so dass ich Typsicherheit für Verbraucher dieser Funktion erreichen kann?

Antwort

2

Nun, das war miserabel einfach, ich musste nur die Grenzen meines eigenen Codes umgehen.


Der Schlüssel der constructor Parameter spezifiziert ein newable Typ zu sein, der einen generischen Typ liefert, die die gleichen gattungsgemäßen Art ist T zurückgegeben von der getInstance Funktion:

function getInstance<T>(constructor: { new(): T }): T { 
    return new constructor(); 
} 

Dies führt zu den korrekten Ergebnissen:

class Foo { 
    public fooProp: string; 
} 

class Bar { 
    public barProp: string; 
} 

var foo: Foo = getInstance(Foo); // OK 
var bar: Foo = getInstance(Bar); // Error: Type 'Bar' is not assignable to type 'Foo' 
Verwandte Themen