那做文档时候用的哪个版本?我可以试试那个版本,这个功能还是必要的,可以用来放全局的东西
不记得了…… 当时没记录这些东西
问一下,你的需求是,把ts写的插件转为js,还是使用ts写Creator游戏脚本?
用ts写游戏代码。
你的环境是什么, 我的:
Creator: 1.6.2
VSCode: 1.19.1
typescript@2.6.2
tslint@5.8.0
一切正常. 另附上我的 tsconfig.json :
{
"compilerOptions": {
"module": "commonjs",
"lib": [ "dom", "es5", "es2015.promise", "es2015" ],
"target": "es5",
"allowJs": true,
"experimentalDecorators": true,
"skipLibCheck": true
},
"exclude": [
"node_modules",
"library",
"local",
"temp",
"build",
"settings"
]
}
我之前也碰到过,大概就是这个流程
改tsconfig-》ts编译成js-》cc找不到-》creator开发者选项-》cc找到了-》tsconfig被改回去了-》感叹世界真奇妙
如果你初学,那你应该是不需要那个namespace的,跳过那一节吧,tsconfig.json用默认的不要改,ts代码都放在assets目录下,就可以了。ts都是Creator自动编译的,不需要我们操心tsconfig.json。
其实文档不该让用户改项目文件夹下的tsconfig.json,因为Creator的ts工作逻辑是这样:
- Creator内置一个tsconfig.json或类似的编译选项,用于内部编译打包ts文件的时候使用,我们看不到也改不了。所以你改变项目目录下的tsconfig.json,不会影响代码的编译打包和运行。
- 项目目录下的tsconfig.json,主要目的是为了IDE和TypeScript的检查和提示。比如module指定为commonjs,意思是告诉IDE和TS编译器,代码将会以commonjs的方式打包,这样IDE和TS才知道你可以使用import,export等关键字;比如experimentalDecorators告诉IDE和TS启用装饰器,这样你用@ccclass的时候才不会报错;比如skipLibCheck,意思是告诉IDE和TS跳过.d.ts的代码检查,这样creator.d.ts中还未修复的一些错误,不会当作你的项目问题爆在你的IDE错误提示中。
你发的第1个错误,意思是outFile参数只支持amd和system两种打包方式,commonjs不支持,这是打包方式决定的。outFile是把所有ts代码打包成一个.js文件,只有amd和system支持。你改成了outDir,意思是把所有ts代码,打包到对应目录下同样结构和名字的各个.js文件,commonjs是支持的。
你发的第2个错误,意思是让IDE和TypeScript只检查和编译namespaces文件夹下的文件,那么它就会跳过根目录下定义引擎API的creator.d.ts,自然就没有cc了。
综上,绝大多数人是不需要使用namespace的,如果非要使用, 那应该新建一个文件夹,在那个文件夹下配置好tsconfig.json,写好ts,打包成单个js文件后,再拷贝回Creator项目assets文件夹下作为插件导入。
这个解释比较到位,遇到过同样的问题,最后通过新建一个文件夹和tsconfig.json解决。可以在新的tsconfig.json里面配置输出文件直接指向目标aasets目录,这样就不用拷贝啦。。。。
谢谢兄弟指导,关键是要在那个文件中新建一个tsconfig.json,十分感谢!
这个在大项目中是有意义的,可以定义全局变量又不污染顶层,方便写代码,文档还是有必要的
请收下我的膝盖!
文档可以更新啦
好的 12345
谢谢。再求问一下,如果我想写一些全局的工具类,并且不继承CC组件(也就不会作为组件拖到某个节点上)。如果不用namespace应该怎么设置项目呢?
我在asset下新建一个.ts文件,在里面创建了一个class,在其他继承cc组件的对象里面调用并new这个类的时候会报is not defined的错,好像creator并没有编译这个类。
Global.ts
class Global{
public static readonly Instance:Global = new Global();
public user: UserModel = null;
private constructor() {
super();
this.user = new UserModel();
}
....
}
export const G = Global.Instance;
Other.ts
import { G } from ".../G";
...
G.user.getUsername()
...
全局单例
这就是toddlxt告诉我的,你不用再问他了
谢谢,试了一下,export的时候会报错:

谢谢。跑了一下发现完全没问题。就是编译器自己会报个错。。
试一下在class Utils前面也加一个export
在windows上,creator v1.8.1上新建TS的helloworld项目,里面的默认的creator.d.ts有错误,导致一直显示’找不到名称“cc”’。我用1.6.1的creator.d.ts替换后就可以了。
