2017-06-20 155 views
0

我有一個由多個子類擴展的基類。現在我想要將父類的類型作爲屬性的類型。所有的孩子類型都應該是有效的。我已經嘗試過typeof,但不起作用。關於如何將基類的類型作爲屬性的類型的任何想法?爲什麼我要的類型的引用的原因是,我希望能夠創建類的新實例,例如新test.componentType()應該創建CHILD2的新實例類型和派生類的打字稿類型

class Parent { 

} 

class Child1 extends Parent { 

} 

class Child2 extends Parent { 

} 

interface Config { 
    componentType: typeof Parent; 
} 

const test: Config = { 
    componentType: typeof Child2 
} 

new test.componentType() -> should create a new instance of Child2 
+0

有沒有必要要使用typeof,只需使用父 – toskv

+2

在任何類中,只需使用'this.constructor.prototype'即可獲得父類。從您的問題中不清楚爲什麼您需要在界面中定義該屬性。 – artem

+1

現在編輯該問題 – Abris

回答

2

你的代碼是不起作用,因爲Child2已經是類對象,它與typeof Parent兼容。 test應該已經定義是這樣的:

const test: Config = { 
    componentType: Child2 
} 

儘管如此,你似乎只想領域componentType舉行的構造函數。在這種情況下,你可以componentType原型爲與new方法的對象:

interface Config { 
    componentType: { new(): Parent }; 
} 

const test: Config = { 
    componentType: Child2 
} 

const myinstance: Parent = new test.componentType(); 

要保留有關構建的實例類型的信息,通用型可用於 :

interface Config<T extends Parent> { 
    componentType: { new(): T }; 
} 

const test = { 
    componentType: Child2 
} 

const myinstance: Child2 = new test.componentType(); 
+0

非常感謝你的回答:) {new(... args):Parent};解決了它。 – Abris

+1

確實,你需要'(... args)'來捕獲帶有非空參數列表的構造函數。 –