2017-03-01 17 views
0

我不確定如何解釋這個問題,但它可能最好通過示例來描述。如果我有一個工廠的功能是這樣的...在類似createInstance的功能上的類型

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

有沒有一種方法可以讓我輸入這個功能,因此,例如,如果我:

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

隨後的a類型自動將被推斷爲A的一個實例?

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

回答

1

您可以使用構造簽名。

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

完美,謝謝。 – Barguast