ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
>[success] # 命名空间与模块化 ~~~ 1.在js在还没有es6 模块化的时代大家还在对js 模块标准为之奋斗定义了很多规则,此时ts 已经出现,ts 此时为了解决模块化 便出了一套自己模块的标准方案分别叫做 'Internal Modle' 和 'External Module' 2.现在随着js 不断升级,js也有了自己的标准的模块化解决方案,ts作为'js超集'的概念自然 渐渐也开始接受了js 的模块化的导出 方案 3.现在来看ts接受了js'模块化'方案,并且也保留之前自己的方案将其叫做'命名空间' ~~~ [typescript已经有模块系统了,为什么还需要namespace](https://www.zhihu.com/question/65676593) >[info] ## 为什么要命名空间与模块化 ~~~ 1.在两个单独文件中都定义了相同变量,并使用tsc 进行打包得到打包前打包后如下两段代码 ~~~ >[danger] ##### 代码案例 ~~~ // 第一段代码在文件 index.ts const a = 1 // 第二段代码在文件 index1.ts const a = 1 ~~~ * 此时ts 会给出报错提示 ![](https://img.kancloud.cn/b8/90/b8903760cecfabb9d4e5c8e94be83f7d_496x212.png) * 执行tsc 打包指令'npx tsc --outDir dist' ~~~ // 得到两个文件 内容都是如下 "use strict"; var a = 1; ~~~ * 如图 ![](https://img.kancloud.cn/4b/4e/4b4e5e98ad214acca4761a78235fa10b_717x213.png) ~~~ 1.感觉上刚才ts时候报错并没有影响到js打包,此时不然,如果现在将两段代码引入 html 文件就回到了js 早期时候模块化 问题,两段代码并没有自己的作用域,导入先后顺序完全影响到了实际此时值对应关系 ~~~ ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <script src="../dist/index1.js"></script> <script src="../dist/index.js"></script> </body> </html> ~~~