如题,组件定义如下:
module test {
@ccclass
export class TestButton extends cc.Component {}
可在别的组件里import的时候会报错,我看到文档里说使用namespace需要特殊的使用方式,module也需要自定义方式编译?还是说就不能用?
报什么错
A.ts
const { ccclass, property } = cc._decorator;
module test {
@ccclass
export default class A extends cc.Component {
print()
{
cc.log(“A print!”)
}
}
}
B.ts
import A from ‘./A’;
const { ccclass, property } = cc._decorator;
module test {
@ccclass
export default class B extends cc.Component {
onLoad() {
// init logic
this.node.getComponent(A).print();
}
}
}
错误提示如下:

[ts] File ‘d:/CreatorDemo/Javascript/assets/Script/A.ts’ is not a module.
creator可以正常编译通过,但是无法正常执行逻辑,找不到组件
你这是想实现命名空间test吗?没有什么意义。Creator里不能把两个Component写在一个文件,而TS又不支持多个文件使用同一个module名称。实在想实现这种结构的话,可以这样:
// A.ts
const {ccclass, property} = cc._decorator;
@ccclass
export default class A extends cc.Component {
print() {
cc.log("A print!")
}
}
// B.ts
import Test from "./Test";
const {ccclass, property} = cc._decorator;
@ccclass
export default class B extends cc.Component {
onLoad() {
// init logic
this.node.getComponent(Test.A).print();
}
}
// Test.ts
import A from "./A";
import B from "./B";
export default {A, B}
2赞
我是一个大厅可能加载多个小游戏,怕冲突,所以想用module防止污染而已。
嗯,Creator的代码文件不能重名,应该从文件名层面防止互相染污,比如不同的小游戏的代码加一个不同的前缀,然后类名跟文件名相同,就OK了。
嗯,我现在就这样弄了,namespace和module都不理想。多谢了~
