[LayaAirIDE 2.0]分享关于TS在1.x和2.x模块差异

最近考虑项目从1.x切换到2.x,对于两者编码规范和编译都有很多差异,论坛上有几位同学提出相关问题,但可惜没有答案。所以特意去学习相关信息,总结出下面的经验,如有错误,希望指出,谢谢!
 1.x
  • 没有模块(module)的概念,只有命名空间(namespace),两个关键字都能编译通过,但是没有差别。

 
  • 所有代码都能直接访问,不需要也没办法使用`require("./xxx")`或者`import * as xxx from "./xxx"`,可以通过使用别名访问:`import a = x.y;`


2.x
  • 有模块(module)的概念,但是不能使用命名空间(namespace), 虽然都能编译通过,但是namespace的代码不会被编译进去bundle.js。原因看后面。
  • 模块的导出和加载使用ES6标准的`export或者export default`和`import a from "./a"`。
  • 由于使用了browserify和tsify编译,browerify是根据入口文件开始查找所有import文件,根据依赖关系进行编译,所以根本找不到namespace的定义文件。也就是说namespace没办法使用。

 
补充:目前laya不支持require,否则应该能通过require加载namespace的文件,这样就能通过全局直接访问了。
已邀请:

bpmf_d

赞同来自:

感谢分享

zeorro

赞同来自:

感谢分享,感觉官方自己都没明白,官方老是说跟ts一样,js一样,但是阉割的能一样吗?

要回复问题请先

商务合作
商务合作