2017-06-20 12 views
0

私はいくつかの子クラスによって拡張された基本クラスを持っています。今、私は、プロパティの型として親クラスの型を持っています。すべての子タイプも有効である必要があります。私はtypeofを試してみましたが、うまくいきません。プロパティの型として基本クラスの型を持つ方法に関するアイデア?私は型への参照は、私は例新しいtest.componentType(のために、クラスの新しいインスタンスを作成できるようにしたいということですしたい理由は)あなたのコードCHILD2Typescript typeof classと派生クラス

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はコンストラクタを保持したいように見えます。その場合、あなたはcomponentTypenewメソッドを持つオブジェクトのプロトタイプ作ることができます構築インスタンスタイプについての情報を保持する

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)'が必要です。 –