TypeScript 中,有两种不同的作用域

109 阅读1分钟

在 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 {} 是一个常用的技巧,用来确保类型扩展能够正确工作。它不会导出任何实际的值,仅仅是为了改变文件的作用域。