3.x getComponent 不支持使用 abstract class,求官方协助

  • Creator 版本: 3.4.2

最近专案要从2.4.3升级到3.4.2版

在调整途中发现这个问题无法解决便来发帖询问

看了一下cc.d.ts定义的部分



从上面 _types_globals__Constructor 的定义很容易看出 T 这里被要求是能够被实例化的类别
(因为使用了 new 语法)

而abstract class抽象类别正好就是不能被实例化的类别

导致使用抽象类别来当作呼叫getComponent的参数的话会被视为不合规的参数

不过实际运行时是可以正确取得继承该抽象类别的子类别就是了

只是满满报红看了就难受 :crazy_face:
3

在2版的时候使用这样的写法是完全没有问题的

官方有打算调整这方面的定义吗?

隔一个月自顶帖

现在是改用3.6.2

我看getComponent接受的类别是有拆成判别是不是abstract class了

只是现在对于抽象类的定义我看还是跟原本的相同

我觉得官方应该还是有关注这个议题,只是不知道怎么定义好抽象类别?

反正有分出来我现在就先手动把抽象类别的定义暂时改成跟2.0时相同了

定义问题之后再让官方慢慢烦恼了哈 :rofl:

有下文了吗

你是如何声明抽象类的?

声明: export default abstract class PageItem extends Component
调用时会报错,item.getComponent(PageItem),只能使用 item.getComponent(‘PageItem’)

这个问题有下文了吗

插眼, 框架里面用抽象Component多

mark同关注

3.6 版本以上已支持 getComponent 传入抽象类


会有红线,3.7.3的,不过不影响运行

类怎么定义的呢?看起来是不符合参数的定义

image

感谢反馈,我们已经建立跟进的 issue 了,应该只是类型问题,不影响运行时

1赞

可以用抽象类继承一个非抽象类吗,我的知识不够用了。

如果这里支持了抽象类,那未继承Component的抽象类,也能被getComponent了吗?这样的话,是不是也不准确。

1赞

如果是 Component <- class A <- abstract class B

getComponent(B) 应该是允许的


3.7.3 有红线。

3.8.1 还没有修复,蹲一下进展