作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我需要一个函数来返回候选列表中给定类型的所有实例,所有实例都派生自一个公共(public)父类(super class)。
例如我可以写:
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)
关于javascript - 如何通过 TypeScript 中的泛型类型过滤类型列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41921868/
我是一名优秀的程序员,十分优秀!