在 TypeScript 中,有两种不同的作用域:
1.全局作用域(Global scope)
2. 模块作用域(Module scope)
当我们添加 export {} 时,它的作用是:
将文件转换为模块:
空的 export {} 语句告诉 TypeScript 这个文件是一个模块
没有这个导出语句,文件会被视为脚本,所有的声明都会进入全局作用域
启用模块扩展:
在模块作用域中,declare module 会正确地扩展现有类型
在全局作用域中,declare module 会覆盖而不是扩展现有类型
简单来说:
// 没有 export {}:在全局作用域中
declare module '@vue/runtime-core' {
// 这会覆盖原有的类型定义
}
// 有 export {}:在模块作用域中
export {}
declare module '@vue/runtime-core' {
// 这会正确地扩展原有的类型定义
}
所以添加 export {} 是一个常用的技巧,用来确保类型扩展能够正确工作。它不会导出任何实际的值,仅仅是为了改变文件的作用域。