2017-03-01 2 views
0

Ich bin nicht sicher, wie diese Frage formuliert wird, aber es ist wahrscheinlich am besten durch ein Beispiel beschrieben. Wenn ich eine Fabrik Funktion wie diese haben ...Typings auf eine createInstance-ähnliche Funktion

function createInstance<TConstructor>(ctor: TConstructor) { 
    return new ctor(); 
} 

Gibt es eine Weise, die ich so diese Funktion eingeben können, zum Beispiel, wenn ich:

class A { 
    myProp: string; 
}; 
const a = createInstance(A); 

Dann wird die Art der a automatisch als eine Instanz von A abgeleitet werden?

const a = createInstance(A); 
a.myProp = 'Like so'; 

Antwort

1

Sie können eine Konstruktsignatur verwenden.

type NoArgumentConstructor<T> = new() => T; 
function createInstance<T>(ctor: NoArgumentConstructor<T>): T { 
    return new ctor(); 
} 

class A { 
    myProp: string; 
}; 

/* const a: A */ 
const a = createInstance(A); 
+0

Perfekt, danke. – Barguast