请教个typescript用法问题

searchComponent(className: string, state:number = 0) {
let comps = this.node.getComponentsInChildren(className);
comps.forEach(v => {
// 访问classname对应的类的属性
});

这里访问classname对应的class属性会报ts(2339)错误,class是继承的Component,不知道该如何通过as转换后访问

-----删掉

-----删掉

看错了 3.x 我试试

    searchComponent<T extends Component>(classConstructor:Constructor<T>, state:number = 0): void {
    const comps = this.node.getComponentsInChildren(classConstructor);
    comps.forEach(v => {
        // 访问classname对应的类的属性
    });
}

因为不确定传进来的是哪个Component 所以非Component的属性肯定不让访问,要不就限制classConstructor类型,
searchComponent<T extends CustomComponent>

要不就直接把v改成(v:any)

谢谢,确实用(v:any)=>{}解决了访问属性的问题,把classname改成模版的方式,在forEach循环里面还是会出现找不到属性问题,getComponentsInChildren默认范围的是Component的数组,所以继承的类属性访问会有问题

any是陋习,能不用就不用,实在没办法才用,用any不如用js。

你这个其实是个设计合理性问题,既然你在foreach里要访问的v的属性是Component的子类的,就应该更明确具体类型,不然就相当于,你有个函数,操作的是人类,你却要求参数站着尿尿~

最简单的这么办,继承Component的同时,让T继承一个接口,接口里明确你希望这个v具备什么属性或者方法。

主要是传入的是类名字符串,用的地方不知道怎么把这个类名字符串转换会类名对应的类型

用的地方只要传入符合条件的类对象就可以了,T 可以根据对象推导出类型的

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。