解决方法
- 使用命名空间别名:通过
as
关键字为命名空间定义别名,在使用时通过别名访问,这样即使不同模块中有相同名称的变量或函数定义,也不会冲突。
- 模块封装:在每个模块内部,将变量和函数定义在模块的私有作用域内,只通过
export
关键字暴露需要外部访问的部分。
举例说明
- 命名空间别名示例
// module1.ts
namespace Utils {
export function log(message: string) {
console.log(`Module1: ${message}`);
}
}
export { Utils };
// module2.ts
namespace Utils {
export function log(message: string) {
console.log(`Module2: ${message}`);
}
}
export { Utils };
// main.ts
import { Utils as Utils1 } from './module1';
import { Utils as Utils2 } from './module2';
Utils1.log('Hello from module1');
Utils2.log('Hello from module2');
- 模块封装示例
// module3.ts
function privateLog(message: string) {
console.log(`Module3 private: ${message}`);
}
export function publicLog(message: string) {
privateLog(message);
console.log(`Module3 public: ${message}`);
}
// module4.ts
function privateLog(message: string) {
console.log(`Module4 private: ${message}`);
}
export function publicLog(message: string) {
privateLog(message);
console.log(`Module4 public: ${message}`);
}
// main2.ts
import { publicLog as log3 } from './module3';
import { publicLog as log4 } from './module4';
log3('Hello from module3');
log4('Hello from module4');