比如我有个MixClass
然后定义另一个
@mixins(MixClass)
class OtherClass {}
在OtherClass中使用MixClass的方法,会提示Property ‘XXX’ does not exist on type ‘OtherClass’.
除了一个个定义d.ts外 有什么好的解决方法吗?
(我试过事先定义空实现的方法,想让mixins来覆盖,但是某些时候不生效)
比如我有个MixClass
然后定义另一个
@mixins(MixClass)
class OtherClass {}
在OtherClass中使用MixClass的方法,会提示Property ‘XXX’ does not exist on type ‘OtherClass’.
除了一个个定义d.ts外 有什么好的解决方法吗?
(我试过事先定义空实现的方法,想让mixins来覆盖,但是某些时候不生效)
已和小伙伴讨论找到解决方案
使用官方mixin
改成如下形式,不使用CCC提供的mixins
既能完美解决代码提示,也完美的实现了混合
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html
楼主这个问题确实解决了多继承问题,不过我碰到了一个问题,已经解决了,这里分享一下。
如果基类的子类 全部 都是通过这种mixins方式来实现的话,cocos默认会设置基类的_sealed为true,这会导致getComponent(基类)返回空,需要手动设置一下。例如
@ccclass
export default class GrandFather extends cc.Component {
}
interface Constructor<T extends cc.Component>{
new(...args: any[]): T;
}
export function Parent1<T extends Constructor<GrandFather>>(Base: T) {
return class extends Base {
constructor(...args: any[]) {
super(...args);
}
}
}
export function Parent2<T extends Constructor<GrandFather>>(Base: T) {
return class extends Base {
constructor(...args: any[]) {
super(...args);
}
}
}
const Son1 = Parent1(GrandFather);
const Son2 = Parent2(GrandFather);
如果GrandFather只有子类Son1和Son2,且都是通过这种mixins来实现的,那么cocos是没法知道GrandFather有子类的,则他的 _sealed 属性不会设置为false,此时通过getComponent(GrandFather)获取时,是没法拿到Son1或者Son2的,需要在GrandFather类中手动设置 GrandFather["_sealed"] = false ,让getComponent方法走instanceof分支来判断。详情见cocos源码