1
私は、すべての共通スーパークラスから派生した候補リストから特定の型のすべてのインスタンスを返す関数が必要です。TypeScriptでジェネリック型のリストをフィルタリングする方法は?
例えば私が書くことができます:例えばと
class A {
protected children: A[] = [];
getChildrenOfType<T extends A>(): T[] {
let result: T[] = [];
for (let child of this.children) {
if (child instanceof T)
result.push(<T>child);
}
return result;
}
}
class B: extends A {}
class C: extends B {}
class D: extends A {}
など
しかし、それはコンパイルされません。 child instanceof T
私には "T"は型だけを参照していますが、ここで値として使用されています "。しかし、具体的なクラス(例:C)はそこで動作します。それは明らかに問題を引き起こすジェネリック型です。そのケースで使用される正しい構文は何ですか?そのような一般的なフィルタリングを実装するために必要なことはありますか?
この解決策は非常に具体的なコンストラクタシグネチャ( 't:new()=> T'部分で定義されている)に対してのみ機能することが判明しました。私は、コンストラクタが拡張されたクラスを使用することはできませんが、このパターンにマッチするクラスは使用できません。この問題の解決策もありますか? –
OK、自分で解決策を見つけたようです。あなたの答えを編集しました。 –