TypeScript里getComponent诡异的错误

import B from './B'
//A.ts
export default A extends cc.Component {
    static test: string = 'bug'
    foo() {
        this.node.getComponent(B).haha = 'haha'    //句1
        //this.node.getComponent('B').haha = 'haha' //句2
    }
}


//B.ts
import A from './A'
cc.log('output' + A.test) //句3
export default B extends cc.Component {
    haha: string;
}

下面就是神奇的时刻,一旦我注释句2,打开句1,那么句3就输出不了test的值,然而我一旦注释句1,打开句2,句3中test的值又可以正常输出,官方来查查是啥原因。creator1.9.3

官方大神在哪?????????????????

因为句1里面用到了B这个类,而句2没有。这样注释掉句1留下句2的话,A.ts中因为没有用到B这个类,TS会把第一行的import B去掉不编译。而如果注释句2留下句1,那么A.ts第一行的import B和B.ts第一行的import A循环引用了。再诡异的问题都有合理的解释。

那如何能使用句式1又不造成循环引用呢

把昵称改成 专业制造BUG

在B.ts里需要用到A的地方,动态地import(异步)或require(同步)
比如

//B.ts
setTimeout(() => {
    cc.log('output' + require("A").default.test); //句3 
}, 0);
export default class B extends cc.Component {
    haha: string;
}
或者
//B.ts
setTimeout(async () => {
    let moduleA = await import("A");
    cc.log('output' + moduleA.default.test); //句3 
}, 0);
export default class B extends cc.Component {
    haha: string;
}

class的@ccclass不要忘了哦

大佬问一下 creator 的 ts 不支持实现 IterableIterator 接口吗