????今天准备使用typescript的Map,结果发现我的egret项目中不支持,但是typescript的文档中明明写着是有这个类可以使用,结果发现上面有一行小字写着ES6支持,我打开项目中的tyconfig.json文件:
{
"compilerOptions": {
"target": "es5",
"outDir": "bin-debug",
"experimentalDecorators": true,
"lib": [
"es5",
"dom",
"es2015.promise"
],
"types": []
},
"include": [
"src",
"libs"
],
"exclude":[
"node_modules"
]
}
果然我是ES5,所以没有可以理解。然后我将es5改成es6:
{
"compilerOptions": {
"target": "es6",
"outDir": "bin-debug",
"experimentalDecorators": true,
"lib": [
"es6",
"dom",
"es2015.promise"
],
"types": []
},
"include": [
"src",
"libs"
],
"exclude":[
"node_modules"
]
}
然后重新编译,在代码中new Map();果然可以了,然后当我将代码进行编译运行时发现报错了:找不到函数入口Main。显然直接将es5改成es6是不行的,经过资料查询,除了以上修改ts的配置文件外还需要以下步骤:
-
将Main.js文件中的Main类增加命名空间(namespace),并且在类上增加export关键字: namespace app{
export class Main extends eui.UILayer {
//其他代码
}
}
-
修改index.html的data-entry-class="Main"配置项: data-entry-class="app.Main"
我搜了一下,项目中是有两个index.html文件的,一个是根目录下,一个是在web目录下,我这里是都做了修改。 -
上面这些做完之后就可以正常通过egret运行了,但是当我们编译成微信小游戏后,会发现还是不行,同样会报找不到Main入口。解决办法是修改main.js,最后一行:
;window.Main = Main;
;window.Main = app.Main;
|