MST

星途 面试题库

面试题:TypeScript中名字空间与模块化结合时如何处理命名冲突

在TypeScript项目里,你将名字空间和模块化进行结合使用,假设不同模块中有相同名称的变量或函数定义,如何避免命名冲突?请给出具体的解决方法,并举例说明。
12.5万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

解决方法

  1. 使用命名空间别名:通过as关键字为命名空间定义别名,在使用时通过别名访问,这样即使不同模块中有相同名称的变量或函数定义,也不会冲突。
  2. 模块封装:在每个模块内部,将变量和函数定义在模块的私有作用域内,只通过export关键字暴露需要外部访问的部分。

举例说明

  1. 命名空间别名示例
// 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');
  1. 模块封装示例
// 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');