2017-10-31 8 views
0

どのように私はそのような何かを宣言することができます。typescriptでいくつかのクラスの拡張だけを受け入れるジェネリックプロパティを宣言するには?

private componentsArr: <T extends Component>[]; 

だから私は

編集をcomponentsArrするコンポーネントクラスを拡張するオブジェクトをプッシュすることができます:私はここでは別の問題

を持っているスクリーンショットです:

Generic type problem

Problem description

あなたは何をやっていますか?

+0

一般:コンパイラは、引数の型が配列に追加するために、Tに割り当てることができることを知っておく必要がありますので、あなたがComponentから直接Tないから導出されるパラメータの型を制約する必要があります方法については問題の内容を変更したため、質問の後に質問のトピックを変更し、回答マークを削除しないでください。別の質問をしてください。 –

+0

新しい質問を反映する答えを変更しました。 –

+0

確かに、申し訳ありません。私は90分まで別の質問をすることができないので、私はこれを編集した。 – Nekor

答えて

1

Tを宣言した時点で型制約を指定する必要があります。 Tがクラス型パラメータの場合、このように書くことができます。

class MyClass<T extends Component> { 
    private componentsArr: T[] 
    addComponent<TSub extends T>(c: new() => TSub): TSub { 
     const newComponent = new c(); 
     this._components.push(newComponent); 
     return newComponent; 
    } 
} 
+1

'public addComponent (c:new()=> TSub)を試してください:TSub' –

関連する問題