Skip to content
索引
venti

解决TypeScript命名冲突的几种方式

报错问题产生原因:

​ 在刚开始接触ts的伙伴肯定遇到一个问题,我在a.ts文件中定义的变量,我在b.ts中也定义了这个变量名,那么ts会产生报错。

​ 这是因为所有的ts文件默认都是全局命名空间模块,所以会产生命名冲突。

解决方式:

方式1:

​ 通过在文件顶部使用ES6模块化,从而将当前文件定义为文件模块而非全局模块。使用这种方式,TS就会将该文件当作一个独立的文件模块了。

typescript
export const foo = 123;
// export不一定需要导出变量,这样也能够定义为文件模块
export
// 使用import也会将当前文件定义为文件模块
import { bar } from 'bar.ts'

方式2:

​ 通过立即执行函数包裹逻辑来创造一个单独的作用域,从而实现不污染全局命名空间

typescript
(()=>{
    // 这里因为是一个单独的作用域,所以并不会污染全局,也不会报错
   class Foo = {} 
})()

推荐方式?

以上两种方式,推荐第一种,这是比较官方的解决方式,在实际的开发中,通常的一个TS模块大多数情况都会使用到ES6模块。