在我的代码示例中,我想搜索给定类型的所有组件,并希望它们以数组形式返回(例如,在components []中搜索A类型的所有组件)。但我收到代码示例下方标记行的错误。
class Component{/*...*/};
class A extends Component { /*...*/}
class B extends Component {/*...*/}
class Entity {
public components: Component[];
getComponentsByType<T>(): Array<T> {
let returnValue: Array<T> = [];
for (let component of this.components) {
if (component instanceof T) { // <-- 1. Error
returnValue.push(<T>component); // <-- 2. Error
}
}
return returnValue;
}
}
[ts] Cannot find name 'T'.
[ts] Neither type 'Component' nor type 'T' is assingable to the other.
我在这里做错了什么? (这有可能吗?)
答案 0 :(得分:1)
这完全可行。您需要将类名作为参数传递。看一下这个。 Using Class Types in Generics。 getComponentsByType<T>
应替换为getComponentsByType<T extends Component>
。
class Component {/*...*/ };
class A extends Component { field = 'A'; }
class B extends Component { field = 'B'; }
class Entity {
public components: Component[];
getComponentsByType<T>(t: { new (): T }): Array<T> {
let returnValue: Array<T> = [];
for (let component of this.components) {
if (component instanceof t) {
returnValue.push(<T>component);
}
}
return returnValue;
}
}
let e = new Entity();
e.components = [new A(), new A(), new B()];
console.log(e.getComponentsByType(A));