解决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模块。