候補のリストから特定のタイプのすべてのインスタンスを返す関数が必要です。これらはすべて、共通のスーパークラスから派生しています。
たとえば、私は次のように書くことができます。
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など)はそこで機能します。問題を引き起こすのは明らかにジェネリック型です。その場合に使用される正しい構成は何ですか?そのような一般的なフィルタリングを実装するために他に何か必要なものはありますか?
このコードを使用できます。
class A {
protected children: A[] = [];
getChildrenOfType<T extends A>(t: new (...args: any[]) => T): T[] {
let result: T[] = [];
for (let child of this.children) {
if (child instanceof t)
result.push(<T>child);
}
return result;
}
}
の右側instanceof
はコンストラクター関数である必要がありますnew() => MyClass
。これをメソッドのパラメーターとして指定できます。
このgetChildrenOfType
方法は次のように使用できます。
var a = new A();
// push some childs to a.children
a.getChildrenOfType(B)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加