# 模块与命名空间
# 全局模块
假设我们在在一个 TypeScript 工程下建立一个文件 1.ts,我们写如下代码:
const a = 1
@前端进阶之旅: 代码已经复制到剪贴板
如果在相同的工程下我们再建立一个新的文件2.ts,如何写出如下代码:
const a = '1'
@前端进阶之旅: 代码已经复制到剪贴板
那么这个时候会报错:

IDE会提示我们重复声明了a变量,虽然我们在两个不同的文件夹内,但是他们所处的空间是全局的,所以需要引入模块系统来规避这个情况,比较全局变量是非常危险的事情。
# 模块系统
TypeScript 与 ECMAScript 2015 一样,任何包含顶级 import 或者 export 的文件都被当成一个模块。
相反地,如果一个文件不带有顶级的import或者export声明,那么它的内容被视为全局可见的。
比如我们改造一下上面的代码,我们在1.ts文件中改动代码如下:
export const a = 1
@前端进阶之旅: 代码已经复制到剪贴板
那么上面的问题就消失了,原因就是export把a变量变成了局部的命名空间内,与2.ts文件中的全局变量a不再产生冲突。
# 模块语法
我们可以用export关键字导出变量或者类型,比如:
// export.ts
export const a = 1
export type Person = {
name: String
}
@前端进阶之旅: 代码已经复制到剪贴板
如果你想一次性导出,那么你可以:
const a = 1
type Person = {
name: String
}
export { a, Person }
@前端进阶之旅: 代码已经复制到剪贴板
甚至你可以重命名:
